瞭解Iaas、Paas、SaaS定義,大數據基礎組件部署用於搭建數據處理平臺,提供平臺能力和服務,屬於Paas平臺建設;部署文檔第一部分爲Hadoop(apache版)+ storm + spark(on yarn)+flink (on yarn)等組件的拼裝式部署;第二部分爲CDH統一部署;
第一部分:基於Apache社區版部署
節點及版本
節點規劃
本次部署在5臺物理機上完成,部署組件包括zk、Kafka、Hadoop(Apache版)、Stom(非on yarn)、spark(on yarn)、redis等。
IP |
組件 |
角色 |
xxx.155 |
zk,kafka,storm,hdfs,yarn,mr |
nameNode,resourceManager,zk,nimbus,kafka |
xxx.156 |
zk,kafka,storm,hdfs,yarn,mr |
secondaryNameNode,DataNode,nodeManager,zk,Supervisor,kafka |
xxx.157 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,zk,Supervisor,kafka |
xxx.158 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,Supervisor,kafka |
xxx.159 |
zk,kafka,storm,hdfs,yarn,mr |
DataNode,nodeManager,Supervisor,kafka |
組件版本
Linux系統:Centos 6.8(lsb_release -a)
主機:5臺物理機(128G內存+8C)
組件 |
版本 |
JDK |
jdk1.8.0_144 |
Hadoop |
Hadoop 3.0.3(Apache版) |
Storm |
apache-storm-0.9.5 |
Spark |
spark-2.4.0-bin-hadoop2.7 |
Kafka |
kafka_2.10_0.10_0.0 |
ZK |
zookeeper-3.4.5 |
Scala |
scala-2.11.12 |
Hive |
apache-hive-3.1.1 |
Mysql |
mysql-5.6.42 |
Hbase |
hbase-2.0.2 |
# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l
用戶及環境準備
用戶及權限
部署Hadoop相關組件儘量不使用root用戶,但需要給部署stream用戶賦予sudo權限,讓其可以修改etc/hosts文件、裝ansible小工具、使其在/data盤有生成文件權限;
修改etc/hosts
使用Sudo權限修改etc/hosts文件,用於免密準備;
ssh免密登錄
5臺主機均使用stream作爲部署用戶,爲方便設置hdfs和yarn的data和log在數據盤的路徑權限,用戶需要 sudo權限;
注:主機A/B/C爲例,設置免密登錄的方法:
① 每臺機器上執行 ssh-keygen -t rsa ,敲3次回車會在家目錄/home/csap下生成隱藏的.ssh目錄,首先需要給此目錄賦權限700: chmod 700 .ssh;這個目錄下有兩個文件:id_rsa 私鑰和id_rsa.pub 公鑰;
② 在此目錄中創建 authorized_keys 文件並賦權:
cd .ssh
touch authorized_keys
chmod 644 authorized_keys
③ 以機器A爲例,執行以上操作後,如果不知道其他機器的密碼,比如綁定4A;把自己的 id_rsa.pub 公鑰 以及其他兩臺機器的公鑰粘貼到 authorized_keys文件中,然後把這個文件複製到其他2臺機器即可。等於所有機器都有其他機器的公鑰,即可完成ssh 免密登錄;
④ 如果知道其他機器密碼,可以直接執行這個把公鑰寫到其他機器的authorized_keys文件中:ssh-copy-id -i ~/.ssh/[email protected]
關閉SELINUX及防火牆
SELINUX 文件路徑爲:/etc/sysconfig/selinux,設置 SELINUX=disabled,永久關閉。
JDK安裝
JDK安裝包複製到/home/stream目錄下解壓,將JAVA_HOME環境變量配置到/home/stream/.bash_profile文件中,並使其立即生效。
① /home/stream/.bash_profile文件增加:
export JAVA_HOME=/home/stream/jdk1.8.0_144
export path=${path}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin
② 使其立即生效:source /home/stream/.bash_profile
③ java -version 指令查看是否生效;
Ansible工具安裝
需要使用sudo權限安裝 yum install ansible,並修改/etc/ansible/hosts文件,添加組及主機列表;
//複製文件到其他主機:
ansible stream -m copy -a 'src=/home/stream/apache-storm-0.9.5/conf/storm.yaml dest=/home/stream/apache-storm-0.9.5/conf/'
//運行command
ansible stream -m command -a 'ls /home/stream'
//批量解壓
ansible stream -m command -a 'tar -zxvf /home/stream/hadoop-3.0.3.tar.gz'
Zookeeper 配置
Zookeeper爲分佈式協調組件,分佈式協調技術主要用來解決分佈式環境當中多個進程之間的同步控制,讓他們有序的去訪問某種臨界資源,防止造成"髒數據"的後果。
配置
直接解壓Zookeeper壓縮包/home/stream下,需要修改的配置文件在zk的conf目錄下,複製zoo_sample.cfg 並改名:cp zoo_sample.cfg zoo.cfg,在zoo.cfg文件中的配置項如下:
注:原生的conf目錄中沒有zoo.cfg
Zoo.cfg的配置:
# the port at which the clients will connect
//zookeeper對外通信端口,默認不用修改
clientPort=2181
# The number of milliseconds of each tick
//Zookeeper服務器心跳時間,單位毫秒
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
//投票選舉新leader的初始化時間
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
//Leader與Follower之間的最大響應時間單位,響應超過syncLimit*tickTime,Leader認爲Follwer死掉,從服務器列表中刪除Follwer
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
//數據持久化目錄,也保存有節點的ID信息,需要自己創建指定
dataDir=/home/xxxx/zookeeperxxxx/data
//日誌保存路徑,這個目錄必須手工創建指定,否則啓動報錯。
dataLogDir=/home/xxx/zookeeper/logs
//Session超時時間限制,如果客戶端設置的超時時間不在這個範圍,那麼會被強制設置爲最大或最小時間。默認的Session超時時間是在2 *tickTime ~ 20 * tickTime這個範圍
maxSessionTimeout=120000
# The number of snapshots to retain in dataDir
//這個參數和下面的參數搭配使用,這個參數指定了需要保留的文件數目。默認是保留3個。(No Java system property)New in 3.4.0
autopurge.snapRetainCount=2
# Purge task interval in hours
# Set to "0" to disable auto purge feature
//在上文中已經提到,3.4.0及之後版本,ZK提供了自動清理事務日誌和快照文件的功能,這個參數指定了清理頻率,單位是小時,需要配置一個1或更大的整數,默認是0,表示不開啓自動清理功能,但可以運行bin/zkCleanup.sh來手動清理zk日誌。
autopurge.purgeInterval=3
//配置zookeepe集羣各節點之間通信和選舉的端口,其中2888端口號是zookeeper服務之間通信的監聽端口,而3888是zookeeper選舉通信端口。server.N N代表這個節點的ID編號,需要用戶手工指定各節點對應的編號,編號不能有重複;
server.1=namenode:2888:3888
server.2=datanode1:2888:3888
server.3=datanode2:2888:3888
配置集羣節點編號myid
新建文件myid(在zoo.cfg配置的dataDir目錄下,此處爲/home/xxx/zookeeperxxx/data),使得myid中的值與server的編號相同,比如namenode上的myid:1;datanode1上的myid:2,以此類推;
配置log4j.properties:
在~/zookeeper/conf/路徑下有log4j.properties文件,需要修改host及其他的log路徑配置信息;
啓動和驗證
進入bin目錄下,./zkServer.sh start啓動服務;
運行./zkServer.sh status,查看各節點狀態,其中1個節點是leader,其餘是follower,也可以通過jps查看,多了一個QuorumPeerMain的進程。
./zkServer.sh stop停止服務,服務起不來請檢查:
① 端口2181 2888 3888 被佔用
② Ip和主機名沒有加入/etc/hosts,配置裏面配置了主機名
Kafka 配置
Kafka是分佈式的高吞吐消息系統,其節點狀態需要Zk維護;
配置
直接將Kafka的tar.gz包解壓到/home/stream目錄下。需要修改xxx/kafka/config/server.properties文件,修改的常用配置項有:
//Kafka機器的每個節點都是一個broker,這個配置本節點的broker編號ID,每個節點編號必須唯一。
//Kafka默認對外通信端口9092以及本機的IP地址,如果不指定hostname和port會使用當前主機,並使用默認的9092端口;
//Kafka 數據持久化目錄,需要手工創建指定。
//Kafka集羣數據保留週期,默認168小時,一般不推薦修改,可以通過命令修改單一topic的超時。
//配置指向的zookeeper集羣。
delete.topic.enable |
默認false |
啓用delete topic參數,建議設置爲true。 |
//如果不開啓true,那麼當用命令刪除topic的時候並不是真正的刪除,而只是標記爲marked for deletion
log.cleanup.policy = delete //默認
//日誌清理策略 選擇有:delete和compact 主要針對過期數據的處理,或是日誌文件達到限制的額度,會被 topic創建時的指定參數覆蓋
auto.leader.rebalance.enable =true //默認false
//是否自動平衡broker之間的分配策略
message.max.bytes =1000000 //默認
//消息體的最大大小,單位是字節。服務器可以接收到的最大的消息大小。注意此參數要和consumer的maximum.message.size大小一致,否則會因爲生產者生產的消息太大導致消費者無法消費。
replica.fetch.max.bytes=1000000
//最好和上面保持一致
log.retention.check.interval.ms=5minutes //默認
//文件大小檢查的週期時間,是否觸發 log.cleanup.policy中設置的策略;
啓動和驗證
分別到各個主機的bin目錄下,逐個啓動服務:
cd /home/xxx/kafka_xxxx/bin;
後臺啓動服務:
nohup ./kafka-server-start.sh ../config/server.properties &
驗證:
jps命令查看是否有kafka的進程,也可以使用zkCli.sh查看broker的狀態是否註冊,並創建topic測試;
Hadoop配置(非HA)
Hadoop是分佈式的高可用批處理框架,CDH的Hadoop自帶Hbase,Hive等其他組件,但Apache包僅帶有分佈式文件系統HDFS和資源調度Yarn,及批處理計算框架Mapred,其他組件如Hbase和Hive需要自己適配安裝配置;
Hadoop的版本爲Apache Hadoop 3.0.3,將tar.gz壓縮包解壓後放在/home/stream家目錄,介紹下解壓後的幾個文件:
bin:Hadoop最基本的管理腳本和使用腳本的目錄,這些腳本是sbin目錄下管理腳本的基礎實現,用戶可以直接使用這些腳本管理和使用Hadoop;
etc:Hadoop配置文件所在的目錄,包括core-site,xml、hdfs-site.xml、mapredsite.xml等配置文件;
include:對外提供的編程庫頭文件(具體動態庫和靜態庫在lib目錄中),這些頭文件均是用C++定義的,通常用於C++程序訪問HDFS或者編寫MapReduce程序;
lib:該目錄包含了Hadoop對外提供的編程動態庫和靜態庫,與include目錄中的頭文件結合使用;
libexec:各個服務對用的shell配置文件所在的目錄,可用於配置日誌輸出、啓動參數(比如JVM參數)等基本信息;
sbin:Hadoop管理腳本所在的目錄,主要包含HDFS和YARN中各類服務的啓動/關閉腳本;
share:Hadoop各個模塊編譯後的jar包所在的目錄;
配置
Hadoop中Common、HDFS、Yarn和MapReduce各有對應的配置文件,用於保存對應模塊中可配置的參數,這些配置文件均爲XML格式且由兩部分構成:系統默認配置文件和管理員自定義配置文件。
系統默認配置文件分別是core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml,其中大部分屬性值默認指定,鏈接如下:
自定義配置文件分別是core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,官網上其daemon的配置屬性鏈接如下:
.Configuring the Hadoop Daemons
這些配置文件用於定義一些默認配置沒有的屬性或者覆蓋默認配置文件中的默認值,這些配置一旦確定,便不能被修改(如果想修改,需重新啓動Hadoop)。
core-default.xml和core-site.xml屬於公共基礎庫的配置文件,默認情況下,Hadoop優先加載它們。
Hadoop-env.sh
只需要配置JAVA_HOME和HADOOP_HOME的值;
Hdfs
需要定義默認Fs和臨時文件夾及IO的緩衝大小;
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://xxx.155/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data01/hadoop</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
namenode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>xxx.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>xxx.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>xxx.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>xxx.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
datanode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>xxx.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>xxx.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>xxx.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>xxx.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>xxx.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data01/hdfs/dn</value>
</property>
</configuration>
Yarn
Yarn是負責集羣資源調度管理的組件,yarn的目標是實現“一個集羣多個框架”,同一集羣上部署一個統一的資源調度管理框架yarn,在yarn之上可以部署其他各種計算框架,比如MapRudece、Storm、Spark等,yarn爲這些計算框架提供統一的資源管理服務(包括CPU、內存),並且能夠根據各種計算框架的負載需求,調整各自佔用的資源,實現集羣資源共享和資源彈性收縮,從而提高集羣利用率。不同框架共享底層存儲從而避免了數據的跨集羣移動,也大大降低了企業運維成本,總結爲:
- 計算資源按需伸縮
- 不用負載應用混搭,集羣利用率高
- 共享底層存儲,避免數據跨集羣遷移
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>xxx.155:8081</value>
</property>
<property>
<name> yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>xxx.155:8082</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>xxx.155:8083</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>xxx.155:8084</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>xxx.155:8085</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>xxx.155</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.resourcemanager.nodes.include-path</name>
<value>HA-DLZX-E0407-csap,HA-DLZX-E0507-csap,HA-DLZX-E0408-csap,HA-DLZX-E0508-csap</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>90</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data01/yarn/nodemanager</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data01/yarn/logs</value>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
MapReduce
MapReduce是一種分佈式的並行計算框架,用於大規模數據集(大於1T)的並行計算,它將複雜的、運行於大規模集羣上的並行計算過程高度抽象到兩個函數:Map和Ruduce,極大地方便了分佈式編程工作,在編程人員不會分佈式並行編程的情況下,也可以很容易將自己的程序運行在分佈式系統上,完成海量數據的計算;
MapReduce設計理念是“計算向數據靠攏”,而不是“數據向計算靠攏”,因爲在大規模數據下移動計算比移動數據更加經濟,移動數據需要大量的網絡傳輸開銷。本着這一理念,在一個集羣中,只要有可能MapRdeuce框架就會將Map程序就近地在HDFS數據所在節點運行,即計算節點和存儲節點一起運行,從而減少了節點間的數據移動開銷;
<configuration>
<property>
<name> mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx2014M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
<property>
<name>mapreduce.task.io.sort</name>
<value>512</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>xxx.155:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>xxx.155:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data01/yarn/temp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data01/yarn/done</value>
</property>
</configuration>
Worker文件
列出所有工作節點的主機名或IP地址,每行一個。
List all worker hostnames or IP addresses in your etc/hadoop/workers file, one per line. Helper scripts (described below) will use the etc/hadoop/workers file to run commands on many hosts at once.
xxx.156
xxx.157
xxx.158
xxx.159
啓動和驗證
第一次啓動hdfs需要格式化:
$HADOOP_HOME/bin/hdfs namenode -format
啓動daemon實例:
$HADOOP_HOME/bin/hdfs --daemon start namenode
$HADOOP_HOME/bin/hdfs --daemon start datanode
$HADOOP_HOME/bin/yarn --daemon start resourcemanager
$HADOOP_HOME/bin/yarn --daemon start nodemanager
$HADOOP_HOME/bin/yarn --daemon start proxyserver
$HADOOP_HOME/bin/mapred --daemon start historyserver
關閉daemon實例後,啓動組件:
$HADOOP_HOME/sbin/start-yarn.sh
$HADOOP_HOME/sbin/start-dfs.sh
使用jps查看相關組件進程是否存在,手動在hdfs上創建文件夾並上傳文件,驗證hdfs是否配置成功:
問題
1、xml中配置的hdfs、yarn、MR的data和log的路徑權限, yarn的日誌目錄沒有寫權限造成yarn啓動成功,但spark啓動失敗(卡住不動),解決辦法是給yarn-site.xml配置中yarn.nodemanager.log-dirs的路徑賦權;
2、core-site.xml的配置中fs.defaultFs的值和主機不一致問題,按照官網配置fs.defaultFS的值是hdfs://xxx.15:9000,有提示報錯:java.io.IOException: Failed on local exception;去掉fs.defaultFs中端口號成功;
<property>
<name>fs.defaultFS</name>
<value>hdfs://xxx.155/</value>
</property>
3、未解決:運行的時候發現出現:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 錯誤,在配置文件hadoop-env.sh中增加:
exportHADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
Hive 配置
Hive是基於Hadoop的數據倉庫工具,可以用於對存儲在Hadoop文件中的數據集進行數據整理、特殊查詢和分析處理。Hive學習門檻較低,因爲它提供了類似於關係數據庫SQL語言的查詢語言Hive QL,可以通過HiveQL語句快速實現簡單的MR統計,Hive本身可以自動將HiveQL語句轉換成MR任務運行,不必實現MR的api開發,因而十分適合數據倉庫的統計分析;
Hive部署有三種部署模式:單用戶、多用戶和遠程服務器模式。單用戶模式連接到一個In-memory的數據庫Derby,一般用於Unit Test;多用戶模式是最常用到的部署模式,通過網絡連接到一個數據庫中,數據庫一般選擇MySQL存儲Metastore元數據;遠程服務器模式即Metastore元數據存儲在遠程服務器端的數據庫中,客戶端通過Thrift協議訪問MetastoreServer數據庫。
部署分兩部分:先裝mysql並創建用戶和數據庫,其次配置Hive;
配置
Mysql部分
1、Mysql官網下載tar包,5.6.33(64位linux通用版),下載地址爲:https://dev.mysql.com/downloads/mysql/5.6.html#downloads;在安裝路徑下/usr/local/解壓、重命名爲mysql;
注:getconf LONG_BIT 得到系統位數
2、新建mysql用戶(屬組mysql),將安裝路徑/usr/local/mysql的屬主和屬組變爲mysql,新建數據路徑/var/lib/mysql及/var/lib/mysql/data,將文件的屬主和屬組變爲mysql;;
groupadd mysql
useradd -r -g mysql mysql
mkdir –p /var/lib/mysql/data
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql
3、安裝數據庫,傳參:數據目錄和安裝目錄;
sudo ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data --user=mysql
4、啓動腳本和配置文件修改:
./support-files/mysql.server和my.cnf;前者是啓動時候運行的腳本,後者是啓動時候讀取的mysql配置,如果不做任何調整的話,默認的basedir是/usr/local/mysql,datadir是/var/lib/mysql/data,如果修改這兩個參數需要修改很多配置量;
linux在啓動MySQL服務時按照次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",linux操作系統在/etc目錄下會存在一個my.cnf,需要將此文件更名爲其他的名字,如/etc/my.cnf.bak,否則該文件會干擾正確配置,造成無法啓動。
sudo cp ./support-files/mysql.server/etc/init.d/mysqld
sudo chmod755/etc/init.d/mysqld
sudo cp./support-files/my-default.cnf/etc/my.cnf
//修改my.cnf配置文件中的數據目錄和安裝目錄:
sudo vi/etc/init.d/mysqld
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
5、啓動服務
sudo service mysqld start
//關閉mysql服務
sudo service mysqld stop
#查看mysql服務運行狀態
sudo service mysqld status
- 設置環境變量,並測試連接,配置登錄權限:
//設置環境變量
export MYSQL=/usr/local/mysql
export PATH=${MYSQL}/bin:${PATH}
//賦權所有庫下的所有表在任何IP地址或主機都可以被root用戶連接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
//修改root用戶的登錄密碼(須停服務,完成後重啓)
UPDATE user SET Password=PASSWORD(‘123456’) where USER=’root’;
flush privileges;
7、創建hive庫和hive用戶,用來保存hive倉庫的元數據信息,對hive用戶賦權
create database hive character set latin1;
create user hive;
hive用戶在表mysql.user下的賦權操作(略)
flush privileges;
Hive部分
Hive的默認元數據保存在Derby中,這裏修改其元數據庫爲mysql,需要下載mysql驅動,地址:https://dev.mysql.com/downloads/file/?id=480090,並將驅動複製到hive/lib文件中。
Hive讀取的配置文件:hive-default.xml和hive-site.xml,可以不修改前者大量默認配置項,後者配置信息可以覆蓋前者, 參考官網:Getting Started Guide;
1、在hdfs上新建hive的元數據路徑
$HADOOP_HOME/bin/hadoop fs –mkdir /tmp
$HADOOP_HOME/bin/hadoop fs –mkdir /user/hive/warehouse
$HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
2、新建並修改hive-site.xml配置文件,如下(配置中讀寫元數據的mysql用戶是root,權限太高,需優化):
cp hive-default.xml.template hive-site.xml
//hive-site.xml的詳細配置:
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</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>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.19.52.155:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
</configuration>
3、初始化hive元數據庫,驗證mysql設置是否成功(成功後hive庫下的表會有很多hive的元數據表);
schematool -dbType mysql -initSchema
啓動和驗證
完成以上配置,直接hive命令啓動hive服務,測試建表;
//hdfs有相應的文件夾,說明配置成功:
問題
1、配置mysql並啓動成功,但修改mysql.user表的登錄用戶配置信息後,重啓發現localhost主機上root用戶無法讀取mysql的系統庫(mysql庫),解決方法:關掉mysql進程並刪除datadir中的data目錄後,重新初始化;
2、配置mysql庫時候的登錄權限問題,對用戶和登錄主機賦權;
HBase 配置
Hbase是一個高可靠、高性能、面向列、可伸縮的分佈式數據庫,主要用來存儲非結構化的和半結構化的鬆散數據。Hbase可以支持超大規模數據存儲,可以通過水平擴展的方式,利用廉價硬件集羣處理超過10億元素和數百萬列元素組成的數據集。
配置
配置參考官網:Example Configurations,需要修改3個配置文件:hbase-env.sh和hbase-site.xml和regionserver文件;
1、hbase-env.sh修改JAVA_HOME, HBASE_CLASSPATH, BASE_MANAGES_ZK,如果使用獨立安裝的zk,則HBASE_MANAGES_ZK 修改爲false,這裏複用之前部署的zk;
export JAVA_HOME=/home/stream/jdk1.8.0_144
export HBASE_CLASSPATH=/home/stream/hbase/conf
export HBASE_MANAGES_ZK=false
2、hbase-site.xml文件設置zk地址和其他配置:
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>xxx.155,xxx.156,xxx.157</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/stream/zk/zookeeper/dataDir</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://xxx.155/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/stream/hbase/temp</value>
</property>
</configuration>
3、修改regionserver文件,添加regionserver主機
xxx.156
xxx.157
xxx.158
xxx.159
啓動和驗證
在bin目錄下運行./start-hbase.sh腳本,查看Hmaster進程,使用hbase shell指令啓動hbase命令行建表,測試;
可以使用zkCli.sh進入zk查看hbase註冊的節點信息:
問題
1、啓動報錯:java.lang.ClassNotFoundException:org.apache.htrace.SamplerBuilder
解決方法: cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
2、啓動報錯:Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
解決方法:在hbase-site.xml中增加配置:
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
Storm 配置
Strom爲分佈式、高可用的實時計算框架, Zookeeper負責Nimbus節點和Supervior節點之間的通信,監控各個節點之間的狀態。提交任務在Nimbus節點上,Nimbus節點通過zk集羣將任務分發下去,而Supervisor是真正執行任務的地方。
Nimbus節點通過zk集羣監控各個Supervisor節點的狀態,當某個Supervisor節點出現故障的時候,Nimbus通過zk集羣將那個Supervisor節點上的任務重新分發到其他Supervisor節點上執行。
如果Nimbus節點出現故障的時候,整個任務並不會停止,但是任務的管理會出現影響,通常這種情況下我們只需要將Nimbus節點恢復就可以了。
Nimbus節點不支持高可用,這也是Storm目前面臨的問題,一般情況Nimbus節點的壓力不大,通常不會出問題。
配置
直接解壓到/home/stream目錄下.需要配置/home/stream/apache-storm-0.9.5/conf/storm.yaml,常用配置項及value 如下:
//配置zk的地址和端口和storm存放在zookeeper裏目錄
storm.zookeeper.server:
- “192.168.159.145”
- “192.168.159.144”
- “192.168.159.143”
storm.zookeeper.port: 21810
storm.zookeeper.root: /storm_new10
//storm主節點的地址 web頁面的端口
nimbus.host: “192.168.159.145”
ui.port: 8989
//每個worker使用的內存
worker.heap.memory.mb: 512
storm.local.dir: "/home/zyzx/apache-storm-0.9.5/data"
//配置工作節點上的進程端口。你配置一個端口,意味着工作節點上啓動一個worker,在實際的生產環境中,我們需要根據實際的物理配置以及每個節點上的負載情況來配置這個端口的數量。在這裏每個節點我象徵性的配置5個端口。
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6700
nimbus.thrift.max_buffer_size: 204876
worker.childopts: “-Xmx1024m”
啓動和驗證
控制節點啓動nimbus和storm ui,其他節點啓動Supervisor節點,通過JPS查看進程,主節點啓動 nimbus進程,工作節點會啓動 supervisor 進程;
nohup storm ui &
nohup storm nimbus &
nohup storm supervisor &
storm的配置文件storm.yaml對格式規範要求高,多餘空格可以造成讀取配置失敗,在啓動所有節點後可以在zookeeper的zkCli客戶端的root目錄下查看storm下存活的supervisor節點數驗證是否啓動成功:
在~/storm/bin下運行./storm list命令列出在集羣上提交的拓撲:
Spark (on yarn) 配置
Spark使用簡練、優雅的Scala語言編寫,基於Scala提供了交互式的編程體驗,同時提供多種方便易用的API。Spark遵循“一個軟件棧滿足不同應用場景”的設計理念,逐漸形成了一套完整的生態系統(包括 Spark提供內存計算框架、SQL即席查詢(Spark SQL)、流式計算(Spark Streaming)、機器學習(MLlib)、圖計算(Graph X)等),Spark可以部署在yarn資源管理器上,提供一站式大數據解決方案, 同時支持批處理、流處理、交互式查詢。
MapReduce計算模型延遲高,無法勝任實時、快速計算的需求,因而只適用於離線場景,Spark借鑑MapReduce計算模式,但與之相比有以下幾個優勢:
- Spark提供更多種數據集操作類型,編程模型比MapReduce更加靈活;
- Spark提供內存計算,將計算結果直接放在內存中,減少了迭代計算的IO開銷,有更高效的運算效率。
- Spark是基於DAG的任務調度執行機制,迭代效率更高;
在實際開發中MapReduce需要編寫很多底層代碼,不夠高效,Spark提供了多種高層次、簡潔的API實現相同功能的應用程序,實現代碼量比MapReduce少很多。
Spark作爲計算框架只是取代了Hadoop生態系統中的MapReduce計算框架,它任需要HDFS來實現數據的分佈式存儲,Hadoop中的其他組件依然在企業大數據系統中發揮着重要作用;
Spark配置on yarn模式只需要修改很少配置,也不用使用啓動spark集羣命令,需要提交任務時候須指定任務在yarn上。
配置
Spark運行需要Scala語言,須下載Scala和Spark並解壓到家目錄,設置當前用戶的環境變量(~/.bash_profile),增加SCALA_HOME和SPARK_HOME路徑並立即生效;啓動scala命令和spark-shell命令驗證是否成功;Spark的配置文件修改如果按照管網教程不好理解,這裏完成的配置參照博客及調試。
Spark的需要修改兩個配置文件:spark-env.sh和spark-default.conf,前者需要指明Hadoop的hdfs和yarn的配置文件路徑及Spark.master.host地址,後者需要指明jar包地址;
spark-env.sh配置文件修改如下:
export JAVA_HOME=/home/stream/jdk1.8.0_144
export SCALA_HOME=/home/stream/scala-2.11.12
export HADOOP_HOME=/home/stream/hadoop-3.0.3
export HADOOP_CONF_DIR=/home/stream/hadoop-3.0.3/etc/hadoop
export YARN_CONF_DIR=/home/stream/hadoop-3.0.3/etc/hadoop
export SPARK_MASTER_HOST=xxx.155
export SPARK_LOCAL_IP=xxx.155
spark-default.conf配置修改如下:
//增加jar包地址,
spark.yarn.jars=hdfs://xxx.155/spark_jars/*
該設置表明將jar地址定義在hdfs上,必須將~/spark/jars路徑下所有的jar包都上傳到hdfs的/spark_jars/路徑(hadoop hdfs –put ~/spark/jars/*),否則會報錯無法找到編譯jar包錯誤;
啓動和驗證
直接無參數啓動./spark-shell ,運行的是本地模式:
啓動./spark-shell –master yarn,運行的是on yarn模式,前提是yarn配置成功並可用:
在hdfs文件系統中創建文件README.md,並讀入RDD中,使用RDD自帶的參數轉換,RDD默認每行爲一個值:
使用./spark-shell --master yarn啓動spark 後運行命令:val textFile=sc.textFile(“README.md”)讀取hdfs上的README.md文件到RDD,並使用內置函數測試如下,說明spark on yarn配置成功;
問題
在啓動spark-shell時候,報錯Yarn-site.xml中配置的最大分配內存不足,調大這個值爲2048M,需重啓yarn後生效。
設置的hdfs地址衝突,hdfs的配置文件中hdfs-site.xml設置沒有帶端口,但是spark-default.conf中的spark.yarn.jars值帶有端口,修改spark-default.conf的配置地址同前者一致:
Flink (on yarn) 配置
Flink是針對流數據和批數據的分佈式內存計算框架,設計思想主要來源於Hadoop、MPP數據庫、流計算系統等,Fink主要是由Java代碼實現,主要靠開源社區貢獻而發展。Flink所處理的主要場景是流數據,默認把所有任務當成流數據處理,批數據只是流數據的一個特例,其支持本地快速迭代及一些環形迭代任務。
Flink以層級式系統形式組建軟件棧,不同層的棧建立在其下層基礎上,其特性如下:
- 提供面向流處理的DataStreaming API和麪向批處理的DataSet API。DataSet API支持Java、Scala和Pyhton,DataStreaming API支持Java和Scala。
- 提供多種候選部署方案,如本地模式(Local)、集羣模式(Cluster)、雲模式(Cloud),對於集羣而言,可以採用獨立模式(Standalone)或者yarn;
- 提供了較好的Hadoop兼容性,不僅可以支持yarn,還可以支持HDFS、Hbase等數據源;
Flink支持增量迭代,具有對迭代自行優化的功能,因此在on yarn上提交的任務性能略好於 Spark。Flink是一行一行地處理數據,Spark是基於RDD的小批量處理,所以Spark在流式數據處理上不可避免地會增加一些延時,實時性沒有Flink好。Flink和Storm可以支持毫秒級計算響應,Spark只能支持秒級響應。Spark的市場影響力和社區活躍度明顯強於Flink,在一定程度上限制了Flink的發展空間;
配置
解壓,進入bin目錄下運行./yarn-session.sh –help 查看幫助驗證yarn是否成功配置,./yarn-session.sh –q 顯示yarn所有nodeManager節點資源;
Flink提供兩種方式在yarn上提交任務:啓動一個一直運行的 YARN session(分離模式)和在 YARN 上運行一個 Flink 任務(客戶端模式),flink只需要修改一個配置conf/flink-conf.yaml ,詳細參數請參考官網:
通用配置:Configuration,HA配置:High Availability (HA)
//需要設置 conf/flink-conf.yaml中的fs.hdfs.hadoopconf 參數來定位YARN和HDFS的配置;
//yarn模式下jobmanager.rpc.address不需要指定,因爲哪一個容器作爲jobManager由Yarn決定,不由Flink配置決定;taskmanager.tmp.dirs也不需要指定,這個參數將被yarn的tmp參數指定,默認就是/tmp目錄下,保存一些用於上傳到ResourceManager的jar或lib文件。parrallelism.default也不需要指定,因爲在啓動yarn時,通過-s指定每個taskmanager的slots數量。
//需要修改yarn-site.xml配置裏面的yarn.resourcemanager.am.max-attempts,使得resourcemanager的連接的重試次數爲4,默認是2;同時在flink-conf.yaml中增加yarn.application-attempts: 4;
//flink-on-yarn cluster HA雖然依賴於Yarn自己的集羣機制,但Flink Job在恢復時依賴檢查點產生的快照,這些快照配置在hdfs,但其元數據信息保存在zookeeper中,所以我們還要配置zookeeper的HA信息;其中recovery.zookeeper.path.namespace也可以在啓動Flink on Yarn時通過-z參數覆蓋。
flink-conf.yaml完整配置如下:
# The RPC port where the JobManager is reachable.
jobmanager.rpc.port: 6123
# The heap size for the JobManager JVM
jobmanager.heap.size: 1024m
# The heap size for the TaskManager JVM
taskmanager.heap.size: 1024m
# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 1
# The parallelism used for programs that did not specify and other parallelism.
parallelism.default: 1
# env
HADOOP_CONF_DIR:/home/stream/hadoop-3.0.3/etc/hadoop
YARN_CONF_DIR:/home/stream/hadoop-3.0.3/etc/hadoop
# Fault tolerance and checkpointing
state.backend:filesystem
state.checkpoints.dir:hdfs://xxx.155/yzg/flink-checkpoints
state.savepoints.dir:hdfs://xxx.155/yzg/flink-checkpoints
# hdfs
#The absolute path to the Hadoop File System’s (HDFS) configuration directory
fs.hdfs.hadoopconf:/home/stream/hadoop-3.0.3/etc/hadoop
#The absolute path of Hadoop’s own configuration file “hdfs-site.xml” (DEFAULT: null).
fs.hdfs.hdfssite:/home/stream/hadoop-3.0.3/etc/hadoop/hdfs-site.xml
#HA
high-availability: zookeeper
high-availability.zookeeper.quorum: xxx.155:2181,xxx.156:2181,xxx.157:2181
high-availability.storageDir: hdfs:///yzg/flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 4
HA模式下需要配置zk,修改conf下的zoo.cfg;zoo.cfg配置如下:
dataDir=/home/stream/zk/zookeeper/logs
# The port at which the clients will connect
clientPort=2181
# ZooKeeper quorum peers
server.1=xxx.155:2888:3888
server.1=xxx.156:2888:3888
server.1=xxx.157:2888:3888
啓動和驗證
採用分離模式來啓動Flink Yarn Session,提交後提示該yarn application成功提交到yarn並返回id,使用yarn application –kill application_id 來停止yarn上提交的任務;
yarn-session.sh -n 3 -jm 700 -tm 700 -s 8 -nm FlinkOnYarnSession -d –st
可以直接提交自帶的詞頻統計用例,驗證on yarn模式是否配置成功:
~/bin/flink run -m yarn-cluster -yn 4 -yjm 2048 -ytm 2048 ~/flink/examples/batch/WordCount.jar
總結
以上基本完成大數據平臺(包含批和流)的基礎組件部署。綜合而言,基於apache Hadoop的散裝部署較爲麻煩,需要自己適配組件,且組件的配置較多,配置較繁瑣;目前完成的組件運行情況如下(on yarn模式的spark和flink無進程):
第二部分:基於CDH版部署
版本比較
根據上一章部署步驟可看出,基於Apache的組件部署較繁瑣且容易出錯,組件耦合性太大,因此考慮到Hadoop集羣部署的高效,集羣的穩定性,以及後期集中的配置管理,業界多使用Cloudera公司的發行版(CDH),綜述兩者的區別及第三方發行版本如下。
Apache社區版
優點:完全開源免費,社區活躍,且文檔、資料詳實;
缺點:1、複雜的版本管理。版本管理比較混亂的,各種版本層出不窮;
2、複雜的集羣部署、安裝、配置。通常按照集羣需要編寫大量的配置文件,分發到每一臺節點上,容易出錯,效率低下。
3、複雜的集羣運維。對集羣的監控,運維,需要安裝第三方的其他軟件,運維難度較大。
4、複雜的生態環境。在Hadoop生態圈中,組件的選擇、使用,比如Hive,Mahout,Sqoop,Flume,Spark,Oozie等等,需要大量考慮兼容性的問題,版本是否兼容,組件是否有衝突,編譯是否能通過等。經常會浪費大量的時間去編譯組件,解決版本衝突問題。
第三方發行版
優點:1、基於Apache協議且100%開源,版本管理清晰。
2、比Apache Hadoop在兼容性、安全性、穩定性上有增強。第三方發行版通常都經過了大量的測試驗證,有衆多部署實例,大量運行到各種生產環境。
3、版本更新快:通常情況,CDH每季度有update,每年有個release。
3、提供了部署、安裝、配置工具,大大提高了集羣部署的效率,可以在幾個小時內部署好集羣。
4、運維簡單:提供了管理、監控、診斷、配置修改的工具,管理配置方便,定位問題快速、準確,使運維工作簡單,有效。
發行版比較
Cloudera:最成型的發行版本,擁有最多的部署案例。提供強大的部署、管理和監控工具。Cloudera開發並貢獻了可實時處理大數據的Impala項目。
Hortonworks: Hortonworks是第一家使用了Apache HCatalog元數據服務特性的提供商。並開創性地極大地優化Hive項目。Hortonworks爲入門提供了一個非常好的,易於使用的沙盒。Hortonworks開發了很多增強特性並提交至核心主幹,這使得Apache Hadoop能夠在包括Windows Server和Windows Azure在內的Microsft Windows平臺上本地運行。
MapR:與競爭者相比,它使用了一些不同的概念,特別是爲了獲取更好的性能和易用性而支持本地Unix文件系統而不是HDFS(使用非開源的組件)。可以使用本地Unix命令來代替Hadoop命令。除此之外,MapR還憑藉快照、鏡像或有狀態的故障恢復之類的高可用性特性來與其他競爭者相區別。
考慮到大數據平臺高效的部署和安裝,中心化的配置管理,使用過程中的穩定性、兼容性、擴展性,以及未來較爲簡單、高效的運維,遇到問題低廉的解決成本,個人建議使用第三方發行版本。
部署規劃
SAS盤和SATA盤區別:SAS盤是企業級應用盤,我們可以稱之爲Enterprise Disk,SATA盤是面向普通用戶,面向對性能、可靠性要求不高的應用,我們也可以稱之爲Nearline Disk。SATA盤採用的是鋁材料基板;SAS盤採用的是玻璃材料基板。採用鋁材料的優點在於存儲密度高,但是,基板的整體平整度不高,這就帶來很嚴重的可靠性問題。在微觀世界中,不平整的基板就像丘陵地帶一樣,當磁頭高速運轉的時候,如果有個風吹草動,磁頭就會和這些山丘碰撞,導致DISC盤面劃傷,數據丟失。玻璃基板的優點在於平整度高,但是存儲密度不如鋁材料高,這就導致SAS盤的數據存儲容量小於SATA盤的容量。
系統盤一般SAS,數據盤一般SATA,3T左右的SAS價格3千左右;
Raid:RAID是由多塊廉價磁盤構成的冗餘陣列,在操作系統下是作爲一個獨立的大型存儲設備出現。RAID可以充分發 揮出多塊硬盤的優勢,可以提升硬盤速度,增大容量,提供容錯功能夠確保數據安全性,易於管理的優點,在任何一塊硬盤出現問題的情況下都可以繼續工作,不會受到損壞硬盤的影響。
組件版本
服務 |
版本 |
操作系統 |
6.8 |
JDK |
1.8 |
CM |
5.7 |
CDH |
5.0.6 |
角色劃分
本次安裝使用中移在線研發域中3臺虛擬機完成,root密碼2wsx@WSX;主機的角色分配和規劃如下:
地址 |
主機名 |
安裝組件 |
角色 |
172.22.247.52 |
01.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
NN, SNN,CM,RM |
172.22.247.54 |
02.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
DN,AM |
172.22.247.56 |
03.cdh.hadoop.csap |
HDFS, MR, Yarn, Hive, Hbase, Spark, Kafka |
DN,AM |
訪問界面
服務名稱 |
地址 |
登錄方式 |
Cloudera Manager |
http://172.22.247.52:7180 |
admin/yzg_cm |
元數據庫
庫名 |
用戶 |
密碼 |
備註 |
cm |
cm |
password |
Database of Cloudera Manager |
am |
am |
password |
Database of Application Manager |
rm |
rm |
password |
Database of Reports Manager |
安裝準備
主機名
1. 修改/etc/sysconfig/network中的hostname選項
2. centos系統中使用vi /etc/hostname 修改主機名;
3. 在/etc/hosts中添加hostname對應的ip地址
4. 執行命令:hostname xxx,讓修改的hostname立即(短暫性的)生效(重啓也可以讓hostname立即生效)
4. reboot now 重啓主機
注意:
1. 修改hosts文件,vi /etc/hosts,一般不能去掉localhost,去掉後zookeeper等框架可能會出問題,如下:
2. 不能只修改/etc/sysconfig/network,而不修改/etc/hosts,因爲有的組件使用java的InetAddress通過hostname來/etc/hosts取對應的ip,取不到會報UnknownHostException異常。
3. 重啓網絡服務(service network restart)對修改hostanme來說沒有卵用;
修改hostname有幾種方式?
1:hostname xxxx -- 運行後立即生效(新會話生效),但是在系統重啓後會丟失所做的修改
2:echo xxxx > /proc/sys/kernel/hostname -- 運行後立即生效(新會話生效),但是在系統重啓後會丟失所做的修改
3: sysctl kernel.hostname=xxxx -- 運行後立即生效(新會話生效),但是在系統重啓後會丟失所做的修改
4:vi /etc/sysconfig/network下的HOSTNAME變量 -- 重啓生效,永久性修改。
修改hosts映射
由於需要搭建集羣,所以hosts內的需要配置其他節點主機的ip及對應的主機名映射關係,用於尋址:
禁用SElinux
安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux,是一個 Linux 內核模塊,也是 Linux 的一個安全子系統,SELinux 主要作用就是最大限度地減小系統中服務進程可訪問的資源(最小權限原則),這裏部署CDH需要將該服務關閉,避免不必要的報錯,修改/etc/selinux/config文件如下:
SELINUX=disabled
SELINUXTYPE=targeted
集羣時鐘同步
1、所有機器安裝ntp :yum -y install ntp
2、CM節點配置時鐘與自己同步:vim /etc/ntp.conf,加入:
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
3、其他非CM節點,同步CM節點的時間,vim /etc/ntp.conf,加入:
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 172.22.247.52
4、重啓所有機器的ntp服務
systemctl restart ntpd或者service ntpd restart
systemctl status ntpd或者service ntpd status
5、驗證同步
所有節點執行ntpq –p,左邊出現*號表示同步成功。
CM配置安裝
配置mysql
在此次安裝主機是centos 6系統,本地yum源沒有mariaDB,因此安裝mysql,安裝mariaDB操作與mysql相同;
1、在172.22.247.52節點使用本地yum安裝mysql:
yum -y install mysql
yum -y install mysql-server
2、啓動並初始化(root密碼是123456):
service mysqld start
/usr/bin/mysql_secure_installation
3、登錄mysql並建庫、建表:mysql -u root –p,根據需求創建相關的用戶和數據庫,以下sql幾乎包含了所有的cloudera所需用戶:
- 創建hive元數據庫和用戶
create database metastore default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON metastore. * TO 'hive'@'%';
FLUSH PRIVILEGES;
- 創建CM庫和用戶
create database cm default character set utf8;
CREATE USER 'cm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON cm. * TO 'cm'@'%';
FLUSH PRIVILEGES;
- 創建AM庫和用戶
create database am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON am. * TO 'am'@'%';
FLUSH PRIVILEGES;
- 創建RM庫和用戶
create database rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON rm. * TO 'rm'@'%';
FLUSH PRIVILEGES;
- 其他:
create database hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON hue. * TO 'hue'@'%';
FLUSH PRIVILEGES;
create database oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON oozie. * TO 'oozie'@'%';
FLUSH PRIVILEGES;
create database sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';
FLUSH PRIVILEGES;
create database nav_ms default character set utf8;
CREATE USER 'nav_ms'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_ms. * TO 'nav_ms'@'%';
FLUSH PRIVILEGES;
create database nav_as default character set utf8;
CREATE USER 'nav_as'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_as. * TO 'nav_as'@'%';
FLUSH PRIVILEGES;
安裝Mysql驅動
mv mysql-connector-java.jar /usr/share/java/,其中jar包名字必須是mysql-connector-java.jar
配置httpd服務
配置172.22.247.52主機的http服務,目的是配置網絡yum源,在CM配置CDH時候可以分發到其他主機;
yum -y install httpd
systemctl start httpd 或service httpd start
在瀏覽器輸入ip地址,網頁正常打開則說明安裝成功:
製作CM的rpm元數據
將CM的系列rpm包和CDH的parcel包下載到本地,並上傳172.22.247.52主機,CM的下載地址爲:http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.7/RPMS/x86_64/
CDH的parcel相關包地址:http://archive.cloudera.com/cdh5/parcels/latest/
在172.22.247.52主機上創建兩個目錄,分別將CDH的parcel包和CM的rpm包copy到該目錄:
mkdir /var/www/html/cdh506
mkdir /var/www/html/cm-5.7.0
在 /var/www/html/cm-5.7.0 目錄下執行:createrepon .生成rpm元數據,並對/var/www/html下的所有目錄和文件賦權:chmod -R 755 /var/www/html
配置Web服務器
通過http服務和CM的rpm元數據製作,可以在網頁端進行yum源配置,製作Cloudera Manager的repo源,執行:vim /etc/yum.repos.d/cm.repo,加入一些配置項:
[cmrepo]
name = cm_repo
baseurl = http://172.22.247.52/cm-5.7.0
enable = true
gpgcheck = false
yum repolist驗證是否成功,在web輸入網址172.22.247.52/cm-5.7.0看是否可以訪問(這裏標題中CM是5.7版本,但rpm包時5.14版本,由於下載較慢直接拷貝5.14版本包):
如果以上都成功,則可以先安裝一下CM的rpm包中的JDK,驗證一下:
yum -y install oracle-j2sdk1.7-1.7.0+update67-1*
配置 CM Server
1、通過yum安裝Cloudera Manager Server
yum -y install cloudera-manager-server的rpm包名稱
2、 配置CM的元數據庫:
/usr/share/cmf/schema/scm_prepare_database.sh mysql cm cm password
3、 啓動Cloudera Manager Server
systemctl start cloudera-scm-server或service cloudera-scm-server start
4、 驗證:
(1)netstat -lnpt | grep 7180 端口有運行
(2)查看日誌:tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log 提示ScmActive completed successfully
(3)web查看172.22.247.52:7180是否可以訪問
CDH安裝
選擇自定義存儲庫,輸入cm的http地址:
繼續完成安裝;
問題
Centos 6.8系統由於缺少很多yum依賴,所以無法使用yum安裝cloudera-manager-agent,使用centos 7.2系統可以;