大数据技能竞赛搭建流程大致计划v2.1

说明

  1. 根据选拔赛说明,极大概率没有连接验证的题。

  2. 关于yum源题:更新本地源,这一题有可能卡住。

  3. 当某一题卡住或有点慢,后面的题也可以做,验证是多点几次。

  4. 一些命令里的文件或目录,我写全了,可视情况修改。

  5. 可提前建好上传。xftp里在/usr/下建的文件夹为java hive hadoop zookeeper。

  6. hadoop等复制配置文件时,注意不要少复制或者多复杂或者粘帖时覆盖了部分单词

  7. 环境变量为:

    1
    vim /etc/profile
    1
    2
    3
    4
    5
    6
    TZ='Asia/Shanghai'; export TZ
    export JAVA_HOME=/usr/java/jdk1.8.0_171
    export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
    export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin
    export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin
    1
    source /etc/profile
  8. 提前mysql安装(slave23),文档里有一句安装epel源:yum -y install epel-release

    1
    2
    3
    4
    5
    # 可用weget。文档里是8.noarch.rpm
    yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
    # 文档里用rpm -ivh mysql57-community-release-el7-10.noarch.rpm。我们用了yum,应该不用了。
    # 安装
    yum -y install mysql-community-server

一 、更新本地源

1
2
3
4
5
6
7
8
9
10
11
12
由于这一块不熟,命令视情况运行。
发信号给 yum 进程:pkill -9 yum
进入 yum 源配置文件:cd /etc/yum.repos.d
如果需要,把CentOS-Base.repo备份一下,把下载的或已有的repo重名为CentOS-Base.repo。
可能会用到的命令
curl -o /etc/yum.repos.d/CentOS-Base.repo 地址(http://等)

wget -O /etc/yum.repos.d/CentOS-Base.repo 地址(http://等)
(不一定执行)删除所有文件:rm -rf *
下载 yum 源:wget http://10.10.31.2:8000/bigdata/repofile/bigdata.repo
清除YUM 缓存:yum clean all
更新元数据 :yum makecache

二、防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

三、映射

  1. 修改主机名

    1
    2
    3
    4
    5
    hostnamectl set-hostname master
    hostnamectl set-hostname slave1
    hostnamectl set-hostname slave2
    hostnamectl set-hostname slave3
    bash
  2. 映射

    1
    vim /etc/hosts
    1
    2
    3
    4
    172. master
    172. slave1
    172. slave2
    172. slave3

四、时区更改

说明

预设的TZ='Asia/Shanghai'; export TZ会视情况加入到环境变量配置文件(/etc/profile)中。

时区可能不一定更改。

命令

1
2
3
4
5
date 查看时间
tzselect
5911
在命令行里执行TZ='Asia/Shanghai'; export TZ也可以
此时就可以把环境变量配好发送生效

五、ntp

1
2
三台或四台下载安装ntp
yum install -y ntp
1
2
3
4
5
6
master修改/etc/ntp.conf
vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(最好做如此操作)如果要屏蔽默认服务器,在server 0~n前加上#
层级为10指stratum 10
1
2
3
4
5
在master执行下面之一应该即可
重启服务
systemctl restart ntpd.service
启动
systemctl start ntpd
1
2
同步
ntpdate master

六、定时任务

1
2
3
4
5
6
7
8
9
10
crontab -e #写一个定时任务
键入i,进入编辑模式
输入内容:
# https://tool.lu/crontab/
# 每十分钟执行一次
*/10 * * * * usr/sbin/ntpdate master
# 早8到晚5,每半小时执行一次
*/30 8-17 * * * usr/sbin/ntpdate master
查看定时任务
crontab -l

七、ssh

说明

有可能题目要求我们不使用简单的,故把两种方式都写出。当然也可以先试一试简单的,尽量根据题目来,尽管官方教学视频是rsa。不过,官方的复制方法不一样。

对于authorized_keys的权限,要修改的话,用 chmod 600 authorized_keys

其中命令里的~/root,如果出问题,可尝试互换,并步意味着两者等价。具体等更新。

dsa

1
2
3
4
生成公钥文件
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
质疑上述命令
可尝试ssh-keygen -t dsa
1
2
3
4
5
6
内容添加至授权文件
cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

cp /root/.ssh/id_dsa.pub /root/.ssh/authorized_keys
这时可尝试连接 ssh master
退出用exit
1
2
3
4
5
6
7
8
9
10
11
12
13
其他结点
在具体结点(slave123)下执行相应的命令
scp master:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub
或下面这个也行,应该。如要用,还是用上面的。-r表示递归复制
scp master:/root/.ssh/id_dsa.pub /root/.ssh/master_dsa.pub

cat /root/.ssh/master_dsa.pub >> /root/.ssh/authorized_keys

cp /root/.ssh/master_dsa.pub /root/.ssh/authorized_keys
这时可尝试连接ssh slave123
退出用exit
# 配置好后可以不进行连接,先验证。不通过再进行下面的连接测试等。
# 注:此时在slave1连接slave1并退出后,要在master连接slave1,其他结点同理。这是根据文档意思得出的。可能和jobtracker有关。

rsa

1
2
3
4
5
6
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
ssh-copy-id slave3
此方式要输密码

虽然上述命令已经搞定了,但还是可以在复制的时候使用类似dsa的方式。猜测dsa也可以用ssh-copy-id的方式(未验证)。

八、jdk

说明

此时可以创建文件夹了,hive、hadoop、java、zookeeper。

可以提前在windows上先建好usr文件夹,再在usr文件夹下建4个文件夹,最后在xftp里右键上传覆盖至usr所在的根目录。我已经在本地建好了。

可以分别配或者解压配好后分发。

1
tar -zxvf /opt/soft/jdk-8u171-linux-x64.tar.gz -C /usr/java/
1
2
3
scp -r /usr/java/ slave1:/usr/
scp -r /usr/java/ slave2:/usr/
scp -r /usr/java/ slave3:/usr/
1
vim /etc/profile
1
2
3
4
5
6
# TZ='Asia/Shanghai'; export TZ
export JAVA_HOME=/usr/java/jdk1.8.0_171
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin
1
source /etc/profile

九、zookeeper

这个到时候题目可能会要求先搭hadoop,或者并行。

1
tar -zxvf /opt/soft/zookeeper-3.4.10.tar.gz -C /usr/zookeeper/
1
2
拷贝zookeeper-3.4.10/conf/zoo_sample.cfg
cp /usr/zookeeper/zookeeper-3.4.10/conf/zoo_sample.cfg /usr/zookeeper/zookeeper-3.4.10/conf/zoo.cfg
1
2
3
4
5
6
7
8
配置zoo.cfg
vim /usr/zookeeper/zookeeper-3.4.10/conf/zoo.cfg
修改dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata
他未添加dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog
# 如果动态添加,到时视情况添上slave3或者修改slave2为slave3
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
1
2
3
4
5
6
创建文件夹
mkdir -p /usr/zookeeper/zookeeper-3.4.10/zkdata
mkdir -p /usr/zookeeper/zookeeper-3.4.10/zkdatalog
创建myid
vim /usr/zookeeper/zookeeper-3.4.10/zkdata/myid
写1 修改23
1
2
3
4
scp -r /usr/zookeeper slave1:/usr/
scp -r /usr/zookeeper slave2:/usr/
scp -r /usr/zookeeper slave3:/usr/
分发后修改myid
1
2
3
4
启动zkServer.sh start
状态zkServer.sh status
注意要都启动再看状态,否则会看到Connection refused (Connection refused) 误以为配错了
启动顺序 master slave1 slave2 ,slave1会是leader

日志

1
2
dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata
dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog

十、hadoop

如果官方给出的配置较少,跟随官方。

1
tar -zxvf /opt/soft/hadoop-2.7.3.tar.gz -C /usr/hadoop/
1
cd /usr/hadoop//usr/hadoop/hadoop-2.7.3/etc/hadoop

hadoop-env.sh

1
vim hadoop-env.sh
1
2
vim /usr/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
修改export JAVA_HOME=/usr/java/jdk1.8.0_171

core-site.xml

1
vim core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value>
<!--他们直接在tmp下,没有hdfs-->
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.checkpoint.period</name>
<value>60</value>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>

hdfs-site.xml

1
vim  hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<property>
<name>dfs.replication</name>
<value>2</value>
<!--研究院写的3-->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

slaves

由于动态添加,这里到时候会可能会删除slave2,添加上slave3

1
2
3
vim slaves
slave1
slave2

master

这个应该没有

1
2
vim master
master

yarn-env.sh 文档无

1
2
vim yarn-env.sh
改export JAVA_HOME=/usr/java/jdk1.8.0_171/

yarn-site.xml

1
vim yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<property> 
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

mapred-site.xml

1
2
3
4
5
6
cp mapred-site.xml.template  mapred-site.xml
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

分发

1
2
3
scp -r /usr/hadoop slave1:/usr/
scp -r /usr/hadoop slave2:/usr/
scp -r /usr/hadoop slave3:/usr/

启动和查看

1
2
3
4
5
6
启动
master格式化 hadoop namenode -format
start-all.sh
查看
master:50070
master:18088

日志

1
cd ${HADOOP_HOME}/logs

案例

  • wordcount

    1
    2
    3
    4
    # 如果/input不存在,最后用-mkdir -p 创建一下。单引号应该可以去掉。
    hadoop fs -put 'wordcount.txt' /input
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input/wordcount.txt /output
    hadoop fs -cat /output/part-r-00000
  • pi

    1
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 5 5

十一、动态添加和删除

1
本地源、防火墙、时区(date可看)、hosts、ssh、同步时间
1
环境变量、jdk、hadoop

说明

命令里sbin/可视情况删除或添加(我都删了)。

dfs.replication如果配得大话,应该适当减小。

虽然可以通过停止集群来添加结点,但尽量不要,毕竟题目要动态。

添加

1
2
每台slaves添加slave3(有教程只修改了master的slaves,我测试时发现可行)
vim /usr/hadoop//usr/hadoop/hadoop-2.7.3/etc/hadoop/slaves
1
2
3
slave3下
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
1
2
3
4
5
master下(namenode)
刷新(看web会有三台):hdfs dfsadmin -refreshNodes
均衡block:start-balancer.sh
查看存活的节点:hdfs dfsadmin -report
也可在web页面查看

删除

临时删除-可不看

1
2
hadoop-daemon.sh stop datanode 
hadoop-daemon.sh stop tasktracker

hdfs-site.xml

如果删除验证不通过,可以配全,当就要编写datanode-allow.list了

1
vim /usr/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/hadoop/hadoop-2.7.3/etc/hadoop/excludes</value>
</property>
<!--还可以添加下面,大部分教程没有。不加的话,slaves里默认都是允许的。加了的话,要仿excludes-->
<property>
<name>dfs.hosts</name>
<value>/usr/hadoop/hadoop-2.7.3/etc/hadoop/datanode-allow.list</value>
</property>

excludes

1
2
vim /usr/hadoop/hadoop-2.7.3/etc/hadoop/excludes
写要删除的结点 slave2 有可能要求加回slave2删除slave3

执行一些命令

1
2
3
4
5
6
7
master下
刷新所有datanode:hdfs dfsadmin -refreshNodes
# 有的教程此处跳至均衡了
查看存活结点:hdfs dfsadmin -report
状态:Decommission In Progress(退役)
执行完毕后:Decommission Status:Decommissioned
可在web(masterIP:50070)看
1
2
3
4
可能需要等待一会,直到web页面显示dead
在删除的结点上
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager
1
2
master下
start-balancer.sh
1
2
3
4
去掉slaves里的slave,excludes里也可以去掉slave3
#下面是官方ppt有但没有口头说
从namenode的excludes、slaves、hosts(我觉得不需要)去掉删除的主机名
所有datanode上执行hadoop-pull.sh(没有这个)

十二、hive

说明

  1. 为了节约时间,可提前在slaves2和slave3(看情况)安装mysql。
  2. 如果题目要求,可把10改成8,文档是8。
  3. master作为client,slave1作为 hive server,slave2或3安装mysql server。
  4. hive-env.sh里如果要配三个,是HADOOP_HOME、hive的conf目录、hive的lib目录。

slave2或slave3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
(/etc/yum.repos.d会有相应文件)
yum -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
grep "password" /var/log/mysqld.log # 有不需要密码的进入方式,暂不使用
复制密码进入mysql,mysql -uroot -p
set global validate_password_policy=0;
set global validate_password_length=6;
alter user 'root'@'localhost' identified by '123456';
可以重进一下
# 下面两个用其中一个,我第二个一直让我输入
# update user set host='%' where user='root';
# grant all privileges on *. * to 'root'@'% with grant option;
# 刷新权限,这个似乎有争议
flush privileges;
1
2
上传connectior-java-5.1.5包到slave1:/usr/local/apache-hive-2.3.7-bin/lib,比赛时应该会在某个地方,文档说slave2:/lib下
scp /lib/mysql-connectior-java-5.1.5-bin.jar slave1:/usr/hive/apache-hive-2.1.1-bin/lib

slave1

1
2
3
4
传-解压或解压-传,自行决定
master下:
tar -zxvf /opt/soft/apache-hive-2.1.1-bin.tar.gz -C /usr/hive/
scp -r /usr/hive slave1:/usr/
1
cd /usr/hive/apache-hive-2.1.1-bin/conf
1
2
3
4
5
6
7
8
slave1的hive的conf下
cp /usr/hive/apache-hive-2.1.1-bin/conf/hive-env.sh.template /usr/hive/apache-hive-2.1.1-bin/conf/hive-env.sh

cp hive-env.sh.template hive-env.sh
vim hive-env.sh

vim /usr/hive/apache-hive-2.1.1-bin/conf/hive-env.sh
修改HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
slave1的hive的conf下
vim hive-site.xml

vim /usr/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
添加
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;characterEncoding=UTF-8</value>
<!--文档里没使用,但官方视频使用了&amp;useSSL=false又加上&amp;characterEncoding=UTF-8-->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>

master

1
cp /usr/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar /usr/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/
1
cd /usr/hive/apache-hive-2.1.1-bin/conf
1
2
vim hive-env.sh
修改HADOOP_HOME=/usr/local/hadoop-2.7.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim hive-site.xml
添加
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave1:9083</value>
</property>
</configuration>

启动

1
2
3
4
5
6
7
8
9
slave1下
hive --service metastore
master下
hive
测试show databases;
# 报Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
有可能<name>hive.metastore.uris</name>值写错了
# 报 Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.
可尝试把runjar杀掉

其它

1
hive> set hive.exec.mode.local.auto=true;

日志

1
cd /tmp/root/hive.log