背景
公司需要搭建一套大資料集群環境用于測驗,本文記錄其詳細程序,方便后面參考
環境資訊
一主兩從,均為ubuntu18.04
主:192.168.10.203(mufengcn)
從:192.168.10.202(mufengcn),192.168.10.200(tsroot)
注:假定括號內為ssh用戶名,均為非root用戶名(真實服務器,文中涉及到的用戶名圖文是不對應的,我只是把文案中涉及到的用戶名批量替換了下~)
準備
設定主機名及配置hosts
依次設定主機名,如:
sudo hostname bigdata203
sudo vi /etc/hostname

三臺機器分別配置hosts
vi /etc/hosts
192.168.10.203 bigdata203
192.168.10.200 bigdata200
192.168.10.202 bigdata202

時間同步
設定相同時區:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步時間:
參考連接:https://blog.csdn.net/vic_qxz/article/details/80344855
大概意思是,將一臺服務器作為時間同步服務器,另外兩臺作為客戶端直接同步,
-
將192.168.10.200作為時間同步服務器
安裝ntp: sudo apt-get install ntp 啟動ntp: /etc/init.d/ntp start驗證啟動成功:

-
在192.168.10.203和192.168.10.202上安裝客戶端ntpdate
sudo apt-get install ntpdate手動同步時間測驗:
sudo ntpdate 192.168.10.200

-
配置cron任務
確定cron服務正常啟動: service cron status

在客戶端(192.168.10.203,192.168.10.202)配置定時任務:crontab -e
下面運算式代表:每分鐘同步一次時間,并將正確或錯誤訊息輸入到/home/mufengcn/ntpdate.log中
* * * * * sudo -n /usr/sbin/ntpdate 192.168.10.200 >>/home/mufengcn/ntpdate.log 2>&1查看當前用戶的定時任務:crontab -l

定時任務中需要sudo命令,應該設定免密:
sudo visudo -f /etc/sudoers
Defaults visiblepw
sudo visudo -f /etc/sudoers.d/ntpdate
mufengcn ALL=NOPASSWD: /usr/sbin/ntpdate
mufengcn 為當前所使用的用戶名
?
-
查看定時任務執行情況
開啟日志列印:sudo vi /etc/rsyslog.d/50-default.conf
取消注釋:

重啟:sudo service rsyslog restart
查看定時任務執行情況:tail -f /var/log/cron.log

查看ntpdate結果:tail -f /home/mufengcn/ntpdate.log

常見問題
- 時間同步失敗,no server suitable for synchronization found.參考以下連接除錯
https://blog.csdn.net/weidan1121/article/details/3953021

- /etc/sudoers一定要用visudo 去修改,因為該工具修改錯誤時有語法提示,如果不小心用vi將/etc/sudoers修改錯了,會導致系統不能使用sudo命令,此時的解決方案參考:
https://baijiahao.baidu.com/s?id=1623745008749543253&wfr=spider&for=pc&isFailFlag=1
關閉防火墻
sudo systemctl stop ufw.service
sudo systemctl disable ufw.service
免密登錄
需要主節點向從節點復制東西免密,即將主節點的id_rsa.pub追加到從節點的authorized_keys
在主節點執行:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
把主節點的~/.ssh/authorized_keys拷貝到從節點的 ~/.ssh/authorized_keys即可
常見問題
- 假設bigdata203連不上bigdata200,可以先在bigdata200上除錯(即自己連自己):
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh -vvvT bigdata200

如上圖所示,使用publickey認證時,正確的結果是:receive packet: type 60
解決方案:在bigdata200機器上執行
sudo chmod o-rwx /home/tsroot/ -R
- 假設bigdata200自身連接沒問題,但是bigdata203上連不上bigdata200,那么繼續查看除錯資訊,會發現是因為兩臺機器用戶名不一樣,在bigdata203上使用ssh連接bigdata200,默認是使用的當前登錄用戶名(mufengcn)連接的,而bigdata200沒有mufengcn這個用戶,所以失敗

解決方案:
在bigdata203添加檔案~/.ssh/config,配置用戶名

hadoop集群安裝
地址:http://archive.apache.org/dist/hadoop/common/hadoop-3.2.0/
需提前安裝好java,jdk 1.8即可,
架構示意如下:

配置
主節點
hadoop-env.sh
export JAVA_HOME=/home/mufengcn/yangqin/jdk1.8.0_181
export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata203:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop_repo</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata203:50090</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata203</value>
</property>
</configuration>
works
指定從節點資訊:
bigdata200
bigdata202
后面兩個組態檔修改,應該追加到最前面,方便腳本參考
sbin/start-dfs.sh sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
sbin/start-yarn.sh sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
從節點
將主節點整個配置拷貝到從節點即可
啟動
在三臺機機器,配置hadoop環境變數:vi /etc/profile
HADOOP_HOME=/home/mufengcn/yangqin/soft/hadoop-3.2.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
使環境變數生效: source /etc/profile
主節點運行:
格式化HDFS: hdfs namenode -format
啟動: start-all.sh

初次啟動失敗,可能是目錄權限的原因:手工到從節點創建/data/hadoop_repo目錄即可,并修改所屬組為當前登錄用戶,如:
sudo mkdir -p /data/hadoop_repo
sudo chown tsroot:tsroot -R /data/hadoop_repo/
驗證
主節點查看
jps -m: 可以看到主節點啟動了NameNode,SecondaryNameNode,ResourceManager

從節點查看
jps -m: 可以看到從節點只啟動了DataNode,NodeManager

前臺訪問
hdfs: http://bigdata203:9870/

yarn: http://bigdata203:8088/

hive安裝
地址: http://archive.apache.org/dist/hive/hive-3.1.2/
Hive相當于Hadoop的客戶端工具,安裝時不一定非要放在集群的節點中,可以放在任意一個集群客戶端節點上都可以,先解壓放入到/home/mufengcn/yangqin/soft/apache-hive-3.1.2-bin
配置
cd apache-hive-3.1.2-bin/conf/
mv hive-env.sh.template hive-env.sh
mv hive-default.xml.template hive-site.xml
hive-env.sh
export JAVA_HOME=/home/mufengcn/yangqin/jdk1.8.0_181
export HIVE_HOME=/home/mufengcn/yangqin/soft/apache-hive-3.1.2-bin
export HADOOP_HOME=/home/mufengcn/yangqin/soft/hadoop-3.2.0
hive-site.xml(找到并修改即可)
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysqlIp:3306/hive?serverTimezone=Asia/Shanghai</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPastsord</name>
<value>admin</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/data/hive_repo/querylog</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/data/hive_repo/scratchdir</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/data/hive_repo/resources</value>
</property>
在Hadoop的core-site.xml檔案中增加下面配置
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
元資料庫初始化
將mysql驅動程式放入hive的lib中
bin/schematool -dbType mysql -initSchema
插入資料:

zookeeper集群安裝
http://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/
解壓放入/home/mufengcn/yangqin/soft/apache-zookeeper-3.5.8
配置
cd apache-zookeeper-3.5.8-bin/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/home/mufengcn/yangqin/soft/apache-zookeeper-3.5.8-bin/data
server.0=bigdata203:2888:3888
server.1=bigdata202:2888:3888
server.2=bigdata200:2888:3888
分別在bigdata200,bigdata202,bigdata203執行:
echo 2 > data/myid
echo 1 > data/myid
echo 0 > data/myid
啟動
主從節點分別啟動
bin/zkServer.sh start
驗證
如果能看到QuorumPeerMain行程就說明zookeeper啟動成功
jps

通過zkServer.sh status查看主從節點(leader和follower)

常用命令
進入shell: bin/zkCli.sh
創建test節點,存盤hello資料:create /test hello
查看test節點內容: get /test
洗掉節點: deleteall
kafka安裝
http://archive.apache.org/dist/kafka/2.4.1/
注意:由于Kafka需要依賴于Zookeeper,所以在這我們需要先把Zookeeper安裝部署起來
解壓:

配置
vi server.properties
broker.id=0
log.dirs=/home/mufengcn/yangqin/soft/kafka_2.12-2.4.1/kafka-logs
zookeeper.connect=bigdata203:2181,bigdata202:2181,bigdata200:2181
broker.id的值默認是從0開始的,集群中所有節點的broker.id從0開始遞增即可
啟動
三臺機器依次啟動
bin/kafka-server-start.sh -daemon config/server.properties
常用命令
啟動:bin/kafka-server-start.sh -daemon config/server.properties
查看topic:bin/kafka-topics.sh --list --zookeeper localhost:2181
生產者:bin/kafka-console-producer.sh --broker-list 192.168.10.203:9092 --topic YQ_Topic
消費者:bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.203:9092 --topic YQ_Topic --from-beginning
hbase集群安裝
地址:http://archive.apache.org/dist/hbase/2.2.7/
配置
hbase-env.sh
export JAVA_HOME=/home/mufengcn/yangqin/jdk1.8.0_111
export HADOOP_HOME=/home/mufengcn/yangqin/soft/hadoop-3.2.0
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=/home/mufengcn/yangqin/soft/hbase-2.2.7/logs
hbase-site.xml
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/mufengcn/yangqin/soft/hbase-2.2.7/tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!--設定HBase表資料,也就是HBase資料在hdfs上的存盤根目錄-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://bigdata203:9000/hbase</value>
</property>
<!--zookeeper集群的URL配置,多個host中間用逗號隔開-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>bigdata203,bigdata202,bigdata200</value>
</property>
<!--HBase在zookeeper上資料的根目錄znode節點-->
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
<!--設定zookeeper通信埠,不配置也可以,zookeeper默認就是2181-->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
因為bigdata200的用戶為tsroot,bigdata203的用戶為mufengcn,所以有可能導致bigdata200沒有權限向hadoop目錄寫入資料而啟動失敗

關閉權限驗證即可
hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata203:50090</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
啟動
bin/start-hbase.sh
驗證
后臺查看:hbase shell

前臺訪問:http://bigdata203:16010/master-status

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/422415.html
標籤:其他
