说明
根据选拔赛说明,极大概率没有连接验证的题。
关于yum源题:更新本地源,这一题有可能卡住。
当某一题卡住或有点慢,后面的题也可以做,验证是多点几次。
一些命令里的文件或目录,我写全了,可视情况修改。
可提前建好上传。xftp里在/usr/下建的文件夹为java hive hadoop zookeeper。
hadoop等复制配置文件时,注意不要少复制或者多复杂或者粘帖时覆盖了部分单词
环境变量为:
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
提前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 2 3 4 5 hostnamectl set-hostname master hostnamectl set-hostname slave1 hostnamectl set-hostname slave2 hostnamectl set-hostname slave3 bash
映射
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 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 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
九、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
如果官方给出的配置较少,跟随官方。
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
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 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 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 yarn-env.sh 改export JAVA_HOME=/usr/java/jdk1.8.0_171/
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
日志
案例
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、同步时间
说明
命令里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
说明
为了节约时间,可提前在slaves2和slave3(看情况)安装mysql。
如果题目要求,可把10改成8,文档是8。
master作为client,slave1作为 hive server,slave2或3安装mysql server。
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&useSSL=false&characterEncoding=UTF-8</value> <!--文档里没使用,但官方视频使用了&useSSL=false又加上&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;
日志