1. 程式人生 > >Hadoop簡介與偽分布式搭建—DAY01

Hadoop簡介與偽分布式搭建—DAY01

fig 初始化 resolve 子網掩碼 產生 安裝包 ifcfg 指定 property

一、 Hadoop的一些相關概念及思想

1、hadoop的核心組成:

(1)hdfs分布式文件系統

(2)mapreduce 分布式批處理運算框架

(3)yarn 分布式資源調度系統

2、hadoop的由來:最早是從nutch+lucene項目中誕生的,用於存儲和處理海量的網頁

3、hadoop的生態系統:

(1)Hbase--分布式數據庫系統

(2)hive--支持sql語法的分析工具(數據倉庫)

(3)sqoop--傳統關系型數據庫到hadoop平臺之間的屬於導入導出工具

(4)mahout--機器學習算法庫(基於mapreduce實現的眾多的機器學習算法)(5)5)flume--分布式的日誌采集系統

(6)storm--分布式實時流式運算框架

(7)spark--分布式實時計算框架

(8)HDFS--一個分布式文件系統

··a、文件是被切分後存放在多臺節點上,而且每一個塊有多個副本

··b、文件系統中有兩類節點(namenode--元數據管理,datanode--存儲數據塊)

3、lucene+solr :參考百度這種所搜引擎的技術結構

二、Hadoop偽分布式搭建

1.準備Linux環境
1.0 設置網絡
(1)設置windows
(2)設置vmware
(3)設置Linux(centos) 詳見1.2

技術分享


參考圖:網絡設置圖

1.1修改Linux的IP
兩種方式:
第一種:通過Linux圖形界面進行修改(強烈推薦)
進入Linux圖形界面 -> 右鍵點擊右上方的兩個小電腦 -> 點擊Edit connections -> 選中當前網絡System eth0 -> 點擊edit按鈕
-> 選擇IPv4 -> method選擇為manual -> 點擊add按鈕 -> 添加IP:192.168.2.200 子網掩碼:255.255.255.0 網關:192.168.2.1 ->
->DNS server:8.8.8.8->apply

第二種:修改配置文件方式(屌絲程序猿專用)
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.2.200" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.168.2.1" ###

註意:修改後不會自動生效,需要重啟Linux服務器(reboot)或者重啟network服務(service network restart)

1.2修改主機名和IP的映射關系
(1)修改主機名:sudo vi /etc/sysconfig/network
HOSTNAME=weekend110
sudo hostname weekend110 #立即生效
eixt #退出當前用戶,重新登入後,即可看見更改的用戶名 如:[[email protected] ~]$
(2)建立ip映射關系
sudo vim /etc/hosts
192.168.2.200 weekend110 # 打開文件後,添加該條記錄

1.3關閉防火墻 (系統服務,用sudo命令)
#查看防火墻狀態
sudo service iptables status
#關閉防火墻
sudo service iptables stop
#查看防火墻開機啟動狀態
sudo chkconfig iptables --list
#關閉防火墻開機啟動
sudo chkconfig iptables off

1.4重啟Linux
reboot

1.5 補充:怎麽在Linux環境下不啟動圖形界面
(1)讓普通用戶具備sudo執行權限
su root #切換到root用戶
vim /etc/sudoers #編輯sudoers文件將當期用戶(hadoop)加入到sudoers file
然後在root ALL=(ALL) ALL 下面添加:hadoop ALL=(ALL) ALL, 如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL

(2)sudo vi /etc/inittab
將啟動級別改為3, 即 id:3:initdefault:

註釋:在圖形界面下,用 命令 init 3 更改為命令行界面

2.安裝JDK
2.1從windows系統上傳文件
輸入命令alt+p 後出現sftp窗口,然後put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz

2.2解壓jdk
#創建文件夾
mkdir /home/hadoop/app
#解壓
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app

2.3將java添加到環境變量中
sudo vi /etc/profile #對所有用戶都會生效
#在文件最後添加
export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
export PATH=$PATH:$JAVA_HOME/bin #當前路徑加上後面的路徑,: 表示相加

#刷新配置
source /etc/profile

3.安裝hadoop2.4.1
先上傳hadoop的安裝包到服務器上去/home/hadoop/ , 即輸入命令alt+p 後出現sftp窗口,然後put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz
註意:hadoop2.x的配置文件 /home/hadoop/app/hadoop-2.4.1/etc/hadoop
偽分布式需要修改5個配置文件
3.1配置hadoop
第一個:hadoop-env.sh #環境變量
vim hadoop-env.sh
#第27行
export JAVA_HOME=/usr/java/jdk1.7.0_65

第二個:core-site.xml #公共的配置文件,根據這個就知道namenode在哪臺主機

<!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://weekend110:9000/</value> #hdfs://weekend110:9000/ 表示namenode的地址
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hadoop-2.4.1/data/</value>
</property>

第三個:hdfs-site.xml hdfs-default.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value> #默認配置3個副本,但是搭建偽分布式,一臺機器,所以這裏給1
</property>

第四個:mapred-site.xml (改名字:mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

第五個:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>weekend110</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

第六個:slaves
<!-- 指定哪些機器啟動namenode,根據此文件找namenode-->
weekend110
...

3.2將hadoop添加到環境變量
sudo vim /etc/profile
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65
export HADOOP_HOME=/home/hadoop/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile #刷新

3.3格式化namenode(是對namenode進行初始化)
hadoop namenode -format

3.4啟動hadoop
進入到:cd app/hadoop-2.4.1/sbin/

先啟動HDFS
start-dfs.sh
stop-dfs.sh

再啟動YARN
start-yarn.sh
stop-yarn.sh

3.5驗證是否啟動成功
使用jps命令驗證 (查看所有的進程)
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode


3.6 網頁查看&測試hdfs&測試mapreduce
(1)網頁查看:
進入windows, C:\Windows\System32\drivers\etc,修改hosts , 添加一條記錄: 192.128.2.200 weekend110
訪問:http://192.168.2.200:50070 ,或者 http://weekend110:50070(HDFS管理界面)
訪問http://192.168.2.200:8088 (MR管理界面)
(2)測試hdfs
從Linux向hdfs傳文件: hadoop fs -put jdk-7u65-linux-i586.tar.gz hdfs://weekend110:9000/
從hdfs下載文件到linux: hadoop fs -get hdfs://weekend110:9000/jdk-7u65-linux-i586.tar.gz
(3)測試mapreduce
在/home/hadoop/app/hadoop-2.4.1/share/hadoop/mapreduce 下,有hadoop-mapreduce-examples-2.4.1.jar,裏面有mapreduce例子程序
例子1:運行hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 5 5
例子2:
新建一個文本:[[email protected] mapreduce]$ vi test.txt
hello world
hello kitty
hello kitty
hello kugou
hello baby
在hdfs新建目錄wordcount: hadoop fs -mkdir hdfs://weekend110:9000/wordcount(或者hadoop fs -mkdir /wordcount)
建立子目錄wordcount/input : hadoop fs -mkdir hdfs://weekend110:9000/wordcount/input (或者hadoop fs -mkdir /wordcount/input)
將test.txt上傳至hdfs: hadoop fs -put test.txt /wordcount/input
上傳結果在HDFS管理界面可以查看
運行wordcount例子: hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /wordcount/input /wordcount/output
查看生成的結果:hadoop fs -ls /wordcount/output
Found 2 items
-rw-r--r-- 1 hadoop supergroup 0 2017-10-04 06:14 /wordcount/output/_SUCCESS
-rw-r--r-- 1 hadoop supergroup 39 2017-10-04 06:14 /wordcount/output/part-r-00000
繼續查看part-r-00000文件內容:hadoop fs -cat /wordcount/output/part-r-00000
baby 1
hello 5
kitty 2
kugou 1
world 1

4.配置ssh免登陸
(1)從weekend110登入spark01出錯
[[email protected] ~]$ ssh spark01
ssh: Could not resolve hostname spark01: Temporary failure in name resolution
(2)解決辦法:添加hosts
執行命令:sudo vi /etc/hosts 添加192.168.2.131 spark01
結果:再次執行命令:ssh spark01 ,成功登入(或者直接用命令: ssh 192.168.2.131)
(3)從weekend110到spark01無密登入配置
生成密鑰對,並且指定加密算法指令:ssh-keygen -t rsa(按4個回車)
執行完這個命令後,在/home/hadoop/.shh下會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免登陸的機器上: scp id_rsa.pub spark01:/home/hadoop/ (註釋:scp 通過ssh協議遠程拷貝到spark01上)
創建空文件夾: touch authorized_keys
修改文件夾權限:chmod 600 authorized_keys # -rw-------. 1 hadoop hadoop 0 Oct 4 23:34 authorized_keys
將公鑰追加到文件authorized_keys裏: cat ../id_rsa.pub >> ./authorized_keys
(4)從weekend110到weekend10無密登入配置
創建空文件夾: touch authorized_keys
修改文件夾權限:chmod 600 authorized_keys # -rw-------. 1 hadoop hadoop 0 Oct 4 23:34 authorized_keys
將/home/hadoop/.shh下的id_rsa.pub(公鑰)追加到 authorized_keys:cat ./id_rsa.pub >> ./authorized_keys
查看文件內容: cat authorized_keys
檢查是否能夠無密登入:
[[email protected] .ssh]$ ssh weekend110
Last login: Thu Oct 5 00:16:43 2017 from weekend110 #成功無密登入
(5)啟動dfs、yarn
啟動dfs: start-dfs.sh
驗證:jps
啟動yarn: satrt-yarn.sh
驗證:jps


註釋:ssh無密登陸機制.png

技術分享


補充:停掉ssh服務:service sshd stop

5、補充:hdfs的實現機制

技術分享

圖hdsf的實現機制.png

Hadoop簡介與偽分布式搭建—DAY01