1、 Hadoop的一些相關概念及思想java
一、hadoop的核心組成: node
(1)hdfs分佈式文件系統 linux
(2)mapreduce 分佈式批處理運算框架算法
(3)yarn 分佈式資源調度系統 sql
二、hadoop的由來:最先是從nutch+lucene項目中誕生的,用於存儲和處理海量的網頁數據庫
三、hadoop的生態系統:vim
(1)Hbase--分佈式數據庫系統windows
(2)hive--支持sql語法的分析工具(數據倉庫)centos
(3)sqoop--傳統關係型數據庫到hadoop平臺之間的屬於導入導出工具服務器
(4)mahout--機器學習算法庫(基於mapreduce實現的衆多的機器學習算法)(5)5)flume--分佈式的日誌採集系統
(6)storm--分佈式實時流式運算框架
(7)spark--分佈式實時計算框架
(8)HDFS--一個分佈式文件系統
··a、文件是被切分後存放在多臺節點上,並且每個塊有多個副本
··b、文件系統中有兩類節點(namenode--元數據管理,datanode--存儲數據塊)
三、lucene+solr :參考百度這種所搜引擎的技術結構
2、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 #退出當前用戶,從新登入後,便可看見更改的用戶名 如:[hadoop@weekend110 ~]$
(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:
新建一個文本:[hadoop@weekend110 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出錯
[hadoop@weekend110 ~]$ 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
檢查是否可以無密登入:
[hadoop@weekend110 .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
五、補充:hdfs的實現機制
圖hdsf的實現機制.png