Create by Baola
环境:centos7
CentOS7下解决ifconfig command not found的办法:

  1. sudo yum install net-tools # 需要有网

步骤:

  1. 修改主机名,主结点为队伍名,从节点为slave1、slave2
  2. 关闭防火墙(如果ssh正常可以不关闭)
  3. 添加主机名与ip映射(三台主从结点都需要)
  4. 配置ssh免密登录
  5. 编写xsync脚本
  6. 安装jdk
  7. 安装hadoop
  8. 安装mysql
  9. 安装hive
  10. 安装python和tensorflow

思考
在练习的时候,创建一台centos作为master,用master克隆两台。每个虚拟机需要拍摄快照,这样可以快速切换到裸机状态。

前奏

1、修改各主机的主机名,并配置 hosts 实现主机名和 ip 地址映射 ,要求主机名称为队伍名称 英文全拼。截图 hosts 文件配置内容
主机:try3
从机1:slave1
从机2:slave2

首先关闭防火墙

  1. centos7关闭防火墙:
  2. # 查看防火墙开启状态
  3. sudo systemctl status firewalld
  4. # 关闭防火墙
  5. sudo systemctl stop firewalld
  6. # 关闭防火墙开机自启
  7. sudo systemctl disable firewalld
  8. centos6关闭防火墙
  9. # service iptables stop
  10. # service iptables start
  11. # service iptables restart

通过vm克隆两台centos7(自己练习需要)

修改主机名(线上赛需要,线下赛不需要)

  1. vi /etc/hostname
  2. # 主机为try3,从机为slave1-2

添加主机名与ip的映射

在try3中修改hosts文件

  1. # 修改hosts文件
  2. vim /etc/hosts
  3. # 添加如下内容
  4. masterip master
  5. slave1ip slave1
  6. slave2ip slave2

需要在三个节点的 hosts 文件下都配置所有节点的映射,类似下图
image.png

配置SSH免密登录(截图成功ssh登录到子节点截图)

在try3和slave1配置免密登陆

  1. # 在master上生成私钥和公钥
  2. # 参数 -t rsa 表示使用rsa算法进行加密,执行后,会在/home/当前用户/.ssh目录下找到id_rsa(私钥)和id_rsa.pub(公钥)
  3. ssh-keygen -t rsa
  4. # 然后三次回车

主机上都输入以下三条命令,将自己的公钥分别分发一下

  1. ssh-copy-id try3
  2. ssh-copy-id slave1
  3. ssh-copy-id slave2
  • ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,
  • ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
  • ssh- copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下。

第一次使用需要输入对方主机的密码

编写xsync脚本,方便后面同步

rsync需要提前安装好,发送主机和接受主机都需要安装rsync

  1. #!/bin/bash
  2. pcount=$#
  3. if((pcount==0)); then
  4. echo no args;
  5. exit;
  6. fi
  7. # get filename
  8. p1=$1
  9. fname=`basename $p1`
  10. echo fname=$fname
  11. # get absoulute filename
  12. pdir=`cd -P $(dirname $p1);pwd`
  13. echo pdir=$pdir
  14. # get current username
  15. user=`whoami`
  16. echo -------------slave1--------------
  17. rsync -rvl $pdir/$fname $user@slave1:$pdir
  18. echo -------------slave2--------------
  19. rsync -rvl $pdir/$fname $user@slave2:$pdir
  20. echo okk!

/usr/sbin/下写好脚本后需要添加权限chmod 777 xsync才能执行命令

安装配置 JDK(截图 java -version 命令)

所有软件统一安装到 /opt 目录下

  1. # 解压
  2. tar -zxvf jdk-8u171-linux-x64.tar.gz
  3. # 重命名解压后的文件夹为 jdk:
  4. mv jdk1.8.0_171/ jdk
  5. # 配置环境变量:
  6. vi /etc/profile
  7. # 进入配置文件后在文件末尾添加如下内容
  8. export JAVA_HOME=/opt/jdk
  9. export PATH=$PATH:$JAVA_HOME/bin
  10. # 安装好后使环境变量生效
  11. source /etc/profile

测试Java是否安装成功

  1. java --version

用脚本将jdk发送到slave1和slave2

  1. xsync /opt/jdk

安装hadoop并配置文件

  1. # 解压hadoop安装包
  2. tar -zxvf hadoop-2.6.0.tar.gz
  3. # 重命名文件夹
  4. mv hadoop-2.6.0 hadoop

修改配置文件,配置文件都在/opt/hadoop/etc/hadoop/目录下

核心配置文件:core-site.xml

  1. # 进入core-site.xml
  2. vi core-site.xml
  3. # 添加如下内容,master 是主节点的主机名,根据自己的主机名或 IP 做修改
  4. <!-- 指定HDFSNameNode的地址 -->
  5. <property>
  6. <name>fs.defaultFS</name>
  7. <value>hdfs://master的主机名或ip:9000</value>
  8. </property>
  9. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/usr/hadoop/data</value>
  13. </property>

hdfs配置文件

修改hadoop-env.sh
将JAVA_HOME 为本机实际的目录
image.png
配置hdfs-site.xml

  1. # 修改hdfs-site.xml
  2. vi hdfs-site.xml
  3. # 添加如下内容
  4. <!-- 指定HDFS副本的数量 -->
  5. <property>
  6. <name>dfs.replication</name>
  7. <value>3</value>
  8. </property>
  9. <!-- 指定Hadoop辅助名称节点主机配置 -->
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>slave2:50090</value>
  13. </property>

image.png

配置yarn

修改yarn-env.sh
image.png
修改yarn-site.xml

  1. # 编辑yarn-site.xml
  2. vi yarn-site.xml
  3. # 在<configuration></configuration>中添加如下内容
  4. <property>
  5. <!-- 指定resourcemanager的位置-->
  6. <name>yarn.resourcemanager.hostname</name>
  7. <value>slave</value>
  8. </property>
  9. <property>
  10. <name>yarn.nodemanager.aux-services</name>
  11. <value>mapreduce_shuffle</value>
  12. </property>

配置mapreduce

修改mapred-env.sh
image.png
修改mapred-site.xml

  1. # 复制一份
  2. cp mapred-site.xml.template mapred-site.xml
  3. # 编辑mapred-site.xml
  4. vi mapred-site.xml
  5. 添加如下内容
  6. <property>
  7. <name>mapreduce.framework.name</name>
  8. <value>yarn</value>
  9. </property>

image.png

修改slaves(添加datanode结点)

  1. vi slaves
  2. # 删除里面的localhost,添加如下内容(不允许有空格之类的)
  3. try3
  4. slave1
  5. slave2

image.png
配置环境变量(截图 profile 文件配置的关键位置)

  1. vi /etc/profile
  2. # add one row
  3. export HADOOP_HOME=/opt/hadoop
  4. # add HADOOP_HOME after PATH
  5. export PATH:$HADOOP_HOME/bin
  6. # 刷新/etc/profile
  7. source /etc/profile

tips:可以用hadoop命令验证是否有效

拷贝 hadoop 到其他的机器上(截图拷贝命令)

方式一:使用自己写的脚本
xsync /opt/hadoop
方式二:使用scp
将修改后的 hadoop 复制到另外两个节点

  1. cd /opt
  2. # 复制到slave1上
  3. scp -r hadoop slave1:/opt/
  4. # 复制到slave2上
  5. scp -r hadoop slave2:/opt/

初始化 hadoop 集群(截图执行命令)

  1. hadoop namenode -format

注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。中间是没有任何确认的

启动 Hadoop 集群(启动成功后执行 jps 命令,截图主节点和子节点的进程)

  1. # 1.在master上启动hdfs
  2. start-dfs.sh
  3. # 2.在slave1上启动yarn
  4. start-yarn.sh

验证启动结果:jps(jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps)
try3
image.png
slave1
image.png
slave2
image.png

任务二 、配置 Hive 集群环境(5 分)

Mysql 安装

(截图 mysql 搭建成功 show databases 命令结果界面 2 分)
进入 /opt/目录下,解压Mysql安装包并重命名

  1. tar zxvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
  2. mv mysql-5.7.16 /opt/mysql //将重新命名后的mysql移动到/opt目录下
  3. mkdir -p /opt/mysql/data //mysql目录下生成data目录

在当前目录(/opt)下新建一个my.cnf,写入如下内容

注意:my.cnf不能放在/opt/mysql/下,否则会报错

/opt/my.cnf用完可以删除了

[mysqld]
basedir=/opt/mysql
datadir=/opt/mysql/data
socket=/tmp/mysql.sock
lower_case_table_names=1
user=root
character-set-server=utf8
symbolic-links=0
[client]
default-character-set=utf8
[mysqld-safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

覆盖掉/etc/my.cnf

cp my.cnf /etc/my.cnf

初始化数据库

/opt/mysql/bin/mysqld --initialize-insecure --basedir=/opt/mysql --datadir=/opt/mysql/data --user=root

将mysql加入服务

cp /opt/mysql/support-files/mysql.server /etc/init.d/mysql

设置mysql开机自启

chkconfig mysql on

启动mysql服务

service mysql start

配置mysql环境变量

vim /etc/profile
# 加入一下内容
export MYSQL_HOME=/opt/mysql
export PATH=$PATH:$MYSQL_HOME:bin

登陆mysql

mysql -uroot -p   # 直接回车
# 修改密码
set password=password('root')
# 创建hive数据库
create database hive default charset utf8;
# 赋予权限
grant all privileges on *.* to 'root'@'%' identified by 'root';
# 刷新权限
flush privileges
# 退出mysql
exit
# 重新登录
mysql -uroot -proot
show databases;
exit

hive搭建

修改配置文件

根据环境部署的需求,修改主节点上的 hive 配置文件:hive-env.sh 和 hive-site.xml ,完成配置后,启动 hive 服务。

修改 hive-env.sh 文件

#进入 hive 的 conf 目录 
cd /opt/hive/conf/ 
cp hive-env.sh.template hive-env.sh //重新命名 
vi hive-env.sh

修改 hadoop 的安装目录=/opt/hadoop,去掉前面的注释符,行号:48image.png

修改 hive-site.xml 文件

cp hive-default.xml.template hive-site.xml  # 重新命名 hive-default.xml.template 文件
vi hive-site.xml # 编辑 hive-site.xml

主要修改以下参数,注意改为自己的主机名或 IP
第一处(行号: 395)

<property>
    <name>javax.jdo.option.ConnectionURL </name>
    <value>jdbc:mysql://try3:3306/hive?useSSL=false</value> 
</property>


第二处(行号:790)

<property> 
  <name>javax.jdo.option.ConnectionDriverName </name> 
  <value>com.mysql.jdbc.Driver</value> 
</property>

第三处(行号:381)

<property> 
  <name>javax.jdo.option.ConnectionPassword </name> 
  <value>root</value> 
</property>

第四处(行号:815)

<property> 
  <name>javax.jdo.option.ConnectionUserName</name> 
  <value>root</value> 
  <description>Username to use against metastore database</description> 
</property>

第五处(行号:52)

<property>
  <name>hive.exec.local.scratchdir</name> 
  <value>/opt/hive/iotmp</value>
  <description>Local scratch space for Hive jobs</description> 
</property>

<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/opt/hive/iotmp</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
</property>

传jar包

#将mysql-connector-java-5.1.17.jar拷贝到/opt/hive/lib/
cp -r mysql-connector-java-5.1.17.jar /opt/hive/lib/

# 将hive发到从机(可省略)
xsync /opt/hive

# 以下步骤可以省略
#将 jline 包拷贝到 hadoop 中(每个机器都做一下,)
cp -r /opt/hive/lib/jline-2.12.jar /opt/hadoop/share/hadoop/yarn/lib
cd /opt/hadoop/share/hadoop/yarn/lib
mv jline-0.9.94.jar jline-0.9.94.jar.bak
xsync /opt/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar.bak

启动测试 hive(截图搭建成功 show databases 命令结果界面 1 分)

/opt/hive/bin 目录下执行

cd /opt/hive/bin
./schematool -dbType mysql -initSchema //初始化元数据

image.png
hadoop 启动情况下,执行 hive 命令

hive

image.png

安装python和TensorFlow

1.解压python安装包

tar -zxvf Python-3.6.3.tgz

2.安装编译相关工具

yum -y install zlib* openssl* gcc

3.编译安装

mkdir /usr/local/python3.6.3 #创建编译安装目录
./configure --prefix=/usr/local/python3.6.3
make && make install

4.建立软连接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3 
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

使用pip安装tensorflow

pip install --upgrade pip
pip install tensorflow==1.1.0

Tensorflow测试

进入python3

import tensorflow as tf
sess = tf.Session() 
hello=tf.constant('Hello,Tensorflow!') 
print(sess.run(hello))
#若在终端下显示 Hello,Tensorflow! 则表示安装 tensorflow 成功

安装hbase

1HBase安装
我们在搭建好Hadoop集群之后就可以搭建HBase数据仓库了.在安装HBase之前检查Hadoop集群是否处于启动状态。下面我们开始HBase的搭建

1、解压Hase、修改HBase的配置文件(3分)

进入/opt目录,找到HBase安装包并解压、重命名,命令如下

cd /opt
tar -zxvf  hbase-1.4.3-bin.tar.gz
mv hbase-1.4.3 /opt/hbase

进入/opt/hbase/conf目录下,修改hbase-env.sh和hbase-site.xml

# 1.去掉注释,并修改JAVA_HOME
JAVA_HOME=/opt/jdk

# 2.去掉HBASE_MANAGES_ZK=true的注释 
export HBASE_MANAGES_ZK=true

编辑hbase-site.xml文件,添加如下几个属性值

<property> 
   <name>hbase.rootdir</name>
   <value>hdfs://master的主机名或ip:9000/hbase</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>   
  <value>true</value> 
</property> 
<property>    
    <name>hbase.zookeeper.quorum</name>   
    <value>集群所有的主机名或IP,逗号隔开</value>
</property>
<property>
    <name>hbase.zookeeper.property.dataDir</name>    
    <value>/opt/hbase/zookeeper</value>
</property>

配置环境变量(集群每台机器都要配置一下)

vi /etc/profile
source /etc/profile

编辑regionservers,添加子节点的主机名或者IP地址
拷贝HBase到其他的机器上(1分)

xsync /opt/hbase

2、启动hbase集群(2分)

start-hbase.sh

验证集群的启动情况:jps
主节点 HMaster、HQuorumPeer

子节点HRegionServer、HQuorumPeer

做后反思

hadoop搭建时,第三台机器启动不了secondaryNamenode,我当时以为是配置文件出错。检查了好几遍。最后想到通过日志文件来排错, 但是误认为日志文件在try3上,所以问题一直没有解决。没想到在slave2上也有日志文件,一看日志文件就是知道原来是/etc/hosts文件里面的ip和域名不对应。

为了做题快速,环境搭建一开始可以将/etc/profile相关的配置(jdk的bin、hadoop的bin和sbin、mysql的bin、hive的bin)项都写上

错误:No database selected

Metastore connection URL:     jdbc:mysql://try3:3306?useSSL=false
Metastore Connection Driver :     com.mysql.jdbc.Driver
Metastore connection User:     root
Starting metastore schema initialization to 1.2.0
Initialization script hive-schema-1.2.0.mysql.sql
Error: No database selected (state=3D000,code=1046)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
*** schemaTool failed ***

原因:

<property>
    <name>javax.jdo.option.ConnectionURL </name>
    <value>jdbc:mysql://try3:3306/hive?useSSL=false</value> 
</property>
value中的hive没有写上去,加上就可以了