目錄
準備作業
jdk
zookeeper
Hadoop
搭建程序中遇到的問題:
準備作業
1)修改主機名(建議把主機名改成hdp-1,hdp-2的形式,方便后續配置環境)
//查看主機名
hostname
//修改主機名
vim /etc/sysconfig/network
2)修改ip對應主機名
vim /etc/hosts
//這里配置上所有節點的IP和對應的主機名,如下
192.168.11 hdp-1
192.168.12 hdp-2
192.168.13 hdp-3
3)關閉防火墻
//centos 6
service iptables status //查看防火墻的狀態
service iptables stop //關閉防火墻
//centos 7
firewall-cmd --state //查看防火墻的狀態
systemctl stop firewalld.service //關閉防火墻
4)配置ssh免密登錄
//在三臺機器上分別運行
ssh-keygen -t rsa
會在/root/.ssh目錄下生成如下密鑰

先在第一臺機器上運行
cat id_rsa.pub >> authorized_keys
此時生成一個authorized_keys檔案,將另外兩臺服務器的id_rsa.pub復制進這個檔案中
使用scp命令,將authorized_keys檔案復制到另外兩臺服務器同樣的目錄下
scp authorized_keys hdp-2:/root/.ssh/
scp authorized_keys hdp-3:/root/.ssh/
三臺機器上都運行以下命令,設定權限
chmod 600 authorized_keys
最后用ssh + 主機名,進行ssh免密登錄
5)同步三臺主機時間
date //查看時間是否一致
yum install ntpdate
ntpdate cn.pool.ntp.org
jdk
1)官網https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下載 jdk-8u181-linux-x64.tar.gz
2)解壓 tar -zxvf jdk-8u181-linux-x64.tar.gz
3)創建Java目錄
mkdir /usr/local/java
4)把解壓后的檔案放入Java檔案下
5)配置環境變數
vim /etc/profile
//修改如下
export JAVA_HOME= /usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
6)java -version 檢測
zookeeper
1)https://downloads.apache.org/zookeeper/stable/ 官網下載安裝包,解壓,放入相應目錄,步驟如上
2)修改 /zookeeper/conf下的組態檔
//復制一個組態檔出來
cp zoo_sample.cfg zoo.cfg
//修改復制出來的配置
vim zoo.cfg
//配置如下
dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
server.1=hdp-1:2888:3888
server.2=hdp-2:2888:3888
server.3=hdp-3:2888:3888
mkdir tmp
//設定本臺機器的myid,另外兩臺分別是2和3
echo 1 > /usr/local/zookeeper-3.4.5/tmp/myid
3)將配置好的zookeeper拷貝到其他節點,修改 myid
4)在三臺機器上分別啟動zk
cd /zookeeper-3.4.5/bin/
./zkServer.sh start //啟動
./zkServer.sh status //查看狀態
或者可以使用shell腳本在一臺機器上啟動所有zk
vim /etc/init.d/zookeeper //撰寫zookeeper腳本
腳本如下:
#zk路徑
ZK_PATH=/opt/zookeeper/zookeeper-3.4.11/
#java路徑
export JAVA_HOME=/opt/java/jdk1.8.0_221/
case $1 in
start) sh $ZK_PATH/bin/zkServer.sh start;;
stop) sh $ZK_PATH/bin/zkServer.sh stop;;
status) sh $ZK_PATH/bin/zkServer.sh status;;
restart) sh $ZK_PATH/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
把腳本注冊為Service
chkconfig --add zookeeper
增加權限
chmod +x /etc/init.d/zookeeper
就可以用 service zookeeper在一臺機器上啟動服務了
Hadoop
1)官網https://hadoop.apache.org/releases.html下載安裝包,步驟如上
2)配置環境變數
vim /etc/profile
export HADOOP_HOME=/root/apps/hadoop-2.9.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version //檢測是否配置成功
3)修改Hadoop路徑下/etc/hadoop下的組態檔
修改core-site.xml
<configuration>
<!-- 指定hdfs的namenode -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp-1</value>
</property>
<!-- 指定hadoop運行時產生檔案的存盤路徑 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hdp-1:2181,hdp-2:2181,hdp-3:2181</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice為hdp-1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>hdp-1</value>
</property>
<!-- hdp-1下面有兩個NameNode,分別是nn1,nn2,注意這里的名字不可以和nameserivice的一樣-->
<property>
<name>dfs.ha.namenodes.hdp-1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hdp-1.nn1</name>
<value>hdp-1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hdp-1.nn1</name>
<value>hdp-1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hdp-1.nn2</name>
<value>hdp-2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hdp-1.nn2</name>
<value>hdp-2:50070</value>
</property>
<!-- 指定NameNode的共享edits元資料在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hdp-1:8485;hdp-2:8485;hdp-3:8485/hdp-1</value>
</property>
<!-- 指定JournalNode在本地磁盤存放資料的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journaldata</value>
</property>
<!-- 開啟NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實作方式 -->
<property>
<name>dfs.client.failover.proxy.provider.hdp-1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxy Provider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 設定namenode存放的路徑 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/name</value>
</property>
<!-- 設定hdfs副本數量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 設定datanode存放的路徑 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
<!-- 在NN和DN上開啟WebHDFS (REST API)功能,不是必須 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<!-- 指定mr框架為yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- 開啟RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的邏輯名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hdp-1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hdp-2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hdp-1:2181,hdp-2:2181,hdp-3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改hadoop下的workers(3.0以前為slaves)
hdp-1
hdp-2
hdp-3
配置好后均同步到其他服務器
4)啟動
有兩種方式,一種全部啟動,另一種單獨啟動所需行程
第一種:
//第一次啟動需要格式化namenode,后續不用格式化
hdfs namenode -format
start-all.sh //全部啟動
第二種:
//嚴格按照順序
//手動啟動journalnode
cd /usr/local/hadoop
sbin/hadoop-daemon.sh start journalnode
//格式化namenode:
hdfs namenode -format
//格式化ZKFC:
hdfs zkfc -formatZK
//啟動HDFS:
sbin/start-dfs.sh
//啟動YARN:
sbin/start-yarn.sh
至此,Hadoop的HA配置完畢!
搭建程序中遇到的問題:
Hadoop啟動時的權限問題:
在hadoop/sbin目錄下,start-dfs.sh和stop-dfs.sh檔案,添加下列引數
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root HDFS_ZKFC_USER=root
start-yarn.sh和stop-yarn.sh檔案,添加下列引數:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
JAVA_HOME配置好后,Hadoop啟動仍報錯,找不到java的問題:
在hadoop/etc/hadoop目錄下,hadoop-env.sh添加
export JAVA_HOME = /usr/local/jdk1.8.0_181
以上操作完成后,均同步到其他服務器內!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286550.html
標籤:其他
上一篇:SQL攻擊
