手把手教你搭建Hadoop生态系统伪分布式集群
Hello,我是 Alex 007,一個熱愛計算機編程和硬件設計的小白,為啥是007呢?因為叫 Alex 的人太多了,再加上每天007的生活,Alex 007就誕生了。
手把手教你搭建Hadoop生態系統偽分布式集群
這篇博客呢,我會詳細介紹怎么搭建Hadoop生態系統,包括JDK、Zookeeper、Hadoop、HBase、MySQL、Hive、Scala、Spark、Sqoop的安裝。
一、準備工作
版本信息:
更新升級軟件包
yum update yum upgrade設置防火墻
關閉防火墻:
systemctl stop firewalld查看狀態:
systemctl status firewalld注意:當環境重置之后,防火墻會自動開啟,可以使用如下命令禁止開機自啟:
systemctl disable firewalld設置防火墻
設置主機名:
hostnamectl set-hostname bigdata二、JDK安裝
有些平臺已經默認安裝了JDK,可以使用默認的,也可以重新安裝,如果重新安裝需要將原有的JDK卸載。
JDK卸載:
jdk文件需要從Oracle官網上下載,如果下載太慢的話也可以從我這里下載:jdk-8u171-linux-x64.tar.gz。
scp jdk-8u171-linux-x64.tar.gz root@47.96.237.42:/usr/java文件最后添加如下內容:
export JAVA_HOME=/usr/java/jdk1.8.0_171 export CLASSPATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH出現版本信息:
三、ZooKeeper安裝
在集群的管理中Zookeeper負責分布式系統的協調工作,不僅適用于Hadoop集群,在其他的集群中也常被用到。
Zookeeper主要解決處理分布式應用的同步和“部分失敗”問題(比如某個關鏈節點宕機了),使集群更加穩定地工作。
如果下載太慢的話可以用我提供的鏈接:zookeeper-3.4.10.tar.gz,下載到Windows本地然后上傳到服務器。
將zoo_sample.cfg文件拷貝一份命名為zoo.cfg,Zookeeper 在啟動時會找這個文件作為默認配置文件。
cd /usr/zookeeper/zookeeper-3.4.10/conf/ cp zoo_sample.cfg zoo1.cfg cp zoo_sample.cfg zoo2.cfg cp zoo_sample.cfg zoo3.cfgzoo1.cfg內容如下:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata_1 clientPort=2181 dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog_1 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889zoo2.cfg內容如下:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata_2 clientPort=2182 dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog_2 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889zoo3.cfg內容如下:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata_3 clientPort=2183 dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog_3 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889添加如下內容:
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10 PATH=$PATH:$ZOOKEEPER_HOME/bin開啟服務:
/usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh start zoo1.cfg /usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh start zoo2.cfg /usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh start zoo3.cfg查看是否啟動成功:
[root@Alex ~]# jps 14496 Jps 13282 QuorumPeerMain 13255 QuorumPeerMain 13323 QuorumPeerMain查看狀態:
[root@Alex ~]# /usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status zoo1.cfg ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo1.cfg Mode: follower [root@Alex ~]# /usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status zoo2.cfg ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo2.cfg Mode: leader [root@Alex ~]# /usr/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status zoo3.cfg ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo3.cfg Mode: follower通過上面狀態查詢結果可見,一個節點是Leader,其余的結點是Follower,至此,zookeeper安裝成功。
四、Hadoop安裝
Hadoop是個分布式的架構,它將海量數據處理工作分配到集群中的多個機器上運行。
如果下載太慢的話可以用我提供的鏈接:hadoop-2.7.3.tar.gz,下載到Windows本地然后上傳到服務器。
添加如下內容:
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3 export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin到此為止,Hadoop 的安裝就完成了,可以測試一下,直接在命令行輸入:
hadoop versionhadoop的各個組件的都是使用XML進行配置。
主要配置要點就是設定 hadoop 運行過程中存放的臨時目錄、元數據存放位置、mapreduce 所采用的框架等。具體的配置文件存在 hadoop 安裝目錄下的 etc 目錄里的 hadoop 文件夾中。
8.1 hadoop-env.sh環境配置文件
cd $HADOOP_HOME/etc/hadoop vim hadoop-env.sh添加如下內容:
export JAVA_HOME=/usr/java/jdk1.8.0_1718.2. core-site.xml文件
這個文件用于設定 hadoop 運行過程中臨時文件存放的路徑及 hdfs 通信方式。
vim core-site.xml添加如下內容:
<property><name>hadoop.proxyuser.root.groups</name><value>*</value> </property> <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><name>fs.default.name</name><value>hdfs://bigdata:9000</value> </property> <property><name>hadoop.tmp.dir</name><value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value> <description>A base for other temporary directories.</description> </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>8.3. hdfs-site.xml文件
這個文件用于設定 hdfs 運行時存放的 name 空間元數據和 data 數據塊路徑。
vim hdfs-site.xml添加如下內容:
<property><name>dfs.replication</name><value>1</value></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>bigdata:9001</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions</name><value>false</value></property>8.4. yarn-site.xml文件
這個文件設置了 yarn 資源管理相關信息。
vim yarn-site.xml添加如下內容:
<!-- 指定ResourceManager的地址--> <property><name>yarn.resourcemanager.address</name><value>bigdata:18040</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>bigdata:18030</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>bigdata:18088</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>bigdata:18025</value></property><property><name>yarn.resourcemanager.admin.address</name><value>bigdata:18141</value></property> <!-- 指定reducer獲取數據的方式--><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>
8.5. mapred-site.xml文件
hadoop是沒有這個文件的,需要將mapred-site.xml.template樣本文件復制為mapred-site.xml,對其進行編輯:
cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml添加如下內容:
<property> <!--指定Mapreduce運行在yarn上--><name>mapreduce.framework.name</name><value>yarn</value></property>在格式化過程中,對本地磁盤使用配置文件設定的路徑創建名稱節點、臨時文件存放目錄等進行創建。也就是基本上構建了一個 hdfs 的存儲框架。
當沒報錯并出現“Exiting with status 0”的時候,表明格式化成功。
多出來5個進程:NameNode、DataNode、ResourceManager、NodeManager、SecondaryNameNode。
Hadoop分為HDFS和MapReduce,HDFS為數據提供了存儲,MapReduce為數據提供了計算。
NameNode主要負責管理元信息,如文件名,目錄結構,屬性,數據塊存儲位置等等
DataNode負責數據塊的具體存取
SecondaryNameNode是NameNode的輔助工具,有兩個作用,一是鏡像備份,二是日志與鏡像的定期合并,注意:它并不是NameNode的備份
ResourceManager負責集群中所有算力的統一管理和分配
NodeManager是每臺機器上的代理,負責容器管理,并監控它們的資源使用情況,以及向ResourceManager提供資源使用報告
啟動進程服務后,就可以使用 hadoop 兩個關鍵的分布式存儲和分布式計算的服務了。
如果想關閉掉某個 hadoop 進程,可以使用進程管理里的 kill 命令。如果關閉所有 hadoop 進程服務,使用 sbin 目錄里的 stop-all.sh 腳本,如下:
sbin/stop-all.sh五、HBase安裝
HBase是一個開源的非關系型分布式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現的編程語言為 Java。它是Apache軟件基金會的Hadoop項目的一部分,運行于HDFS文件系統之上,為 Hadoop 提供類似于BigTable 規模的服務。因此,它可以對稀疏文件提供極高的容錯率。
如果下載太慢的話可以用我提供的鏈接:hbase-1.2.4-bin.tar.gz,下載到Windows本地然后上傳到服務器。
添加如下內容:
export HBASE_MANAGES_ZK=false export JAVA_HOME=/usr/java/jdk1.8.0_171 export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/hadoop一個分布式運行的Hbase依賴一個zookeeper集群,所有的節點和客戶端都必須能夠訪問zookeeper。
默認的情況下Hbase會管理一個zookeep集群,即Hbase默認自帶一個zookeep集群,這個集群會隨著Hbase的啟動而啟動,而在實際的商業項目中通常自己管理一個zookeeper集群更便于優化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 來切換。
這個值默認是true的,作用是讓Hbase啟動的時候同時也啟動zookeeper.在本實驗中,我們采用獨立運行zookeeper集群的方式,故將其屬性值改為false。
添加如下內容:
export HBASE_HOME=/usr/hbase/hbase-1.2.4 export PATH=$PATH:$HBASE_HOME/bin六、MySQL安裝
重載所有修改過的配置文件:
systemctl daemon-reload開啟服務:
systemctl start mysqld開機自啟:
systemctl enable mysqld安裝完畢后,MySQL會在/var/log/mysqld.log這個文件中會自動生成一個隨機的密碼,獲取得這個隨機密碼,以用于登錄MySQL數據庫。
獲取初密碼:
grep "temporary password" /var/log/mysqld.log登陸MySQL:
mysql -uroot -p設置密碼強度為低級:
set global validate_password_policy=0;密碼強度分級如下:
0為low級別,只檢查長度;
1為medium級別(默認),符合長度為8,且必須含有數字,大小寫,特殊字符;
2為strong級別,密碼難度更大一些,需要包括字典文件。
密碼長度最低長為4,當設置長度為1、2、3時,其長度依然為4。
設置密碼長度:
set global validate_password_length=4;修改本地密碼:
alter user 'root'@'localhost' identified by '123456';退出:
\q以新密碼登陸MySQL:
mysql -uroot -p123456創建用戶:
create user 'root'@'%' identified by '123456';允許遠程連接:
grant all privileges on *.* to 'root'@'%' with grant option;添加mysql用戶:
grant all on *.* to hadoop@'%' identified by 'hadoop'; grant all on *.* to hadoop@'localhost' identified by 'hadoop'; grant all on *.* to hadoop@'master' identified by 'hadoop';刷新權限:
flush privileges;創建數據庫:
create database hive_1;退出:
\q七、Hive安裝
如果下載太慢的話可以用我提供的鏈接:apache-hive-2.1.1-bin.tar.gz,下載到Windows本地然后上傳到服務器。
添加如下內容:
export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin export PATH=$PATH:$HIVE_HOME/bin文件內容如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration><property><name>hive.metastore.local</name><value>true</value></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://bigdata:3306/hive_1?characterEncoding=UTF-8&useSSL=true&verifyServerCertificate=false</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hadoop</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hadoop</value></property> </configuration>輸入以下HQL語句:
show databases; create database hadoop_data; show databases; hive> show databases; OK default Time taken: 0.023 seconds, Fetched: 1 row(s) hive> create database hadoop_data; OK Time taken: 0.191 seconds hive> show databases; OK default hadoop_data Time taken: 0.039 seconds, Fetched: 2 row(s)退出:
quit;八、Scala安裝
如果下載太慢的話可以用我提供的鏈接:scala-2.11.12.tgz,下載到Windows本地然后上傳到服務器。
九、Spark安裝
Spark是一個新興的大數據處理的引擎,是分布式大數據處理的高層次抽象。
提供了除map和reduce之外更多的運算符,這些操作是通過一個稱作彈性分布式數據集的分布式數據框架進行的,主要使用內存存儲,用于快速處理。
如果下載太慢的話可以用我提供的鏈接:spark-2.4.0-bin-hadoop2.7.tgz,下載到Windows本地然后上傳到服務器。
添加以下內容:
export SPARK_MASTER_IP=master export SCALA_HOME=/usr/scala/scala-2.11.12 export SPARK_WORKER_MEMORY=8g export JAVA_HOME=/usr/java/jdk1.8.0_171 export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3 export HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.7.3/etc/hadoop添加以下內容:
export SPARK_HOME=/usr/spark/spark-2.4.0-bin-hadoop2.7 export PATH=$SPARK_HOME/bin:$PATH十、Sqoop安裝
Sqoop是一個命令行界面應用程序,用于在關系數據庫和Hadoop之間傳輸數據。
如果下載太慢的話可以用我提供的鏈接:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz,下載到Windows本地然后上傳到服務器。
添加如下內容:
export SQOOP_HOME=/usr/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0 export PATH=$PATH:$SQOOP_HOME/bin更改以下內容:
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/usr/hadoop/hadoop-2.7.3#Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/usr/hadoop/hadoop-2.7.3#set the path to where bin/hbase is available #export HBASE_HOME=#Set the path to where bin/hive is available export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin正確情況,如圖所示:
好了,到此為止吧,再往下要吐血了。
肝了三天,老鐵們支持一下,給個三連吧。
總結
以上是生活随笔為你收集整理的手把手教你搭建Hadoop生态系统伪分布式集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 990. Satisfiability
- 下一篇: 将SQL文件导入Hive