hadoop

hadoop 安裝 (單機模式)java

禁用 selinux 和 iptables
禁用 selinux 和 iptables
禁用 selinux 和 iptables
配置 /etc/hosts 保證全部主機域名可以相互解析
配置 /etc/hosts 保證全部主機域名可以相互解析
配置 /etc/hosts 保證全部主機域名可以相互解析node

一、安裝 java
yum install java-1.8.0-openjdk -ylinux

驗證:
java -versionweb

二、安裝 jps
yum install java-1.8.0-openjdk-devel -yapache

驗證:
jpsbootstrap

三、安裝 hadoop
tar zxf hadoop-2.7.3.tar.gz
mv hadoop-2.7.3 /usr/local/hadoopsession

修改配置文件的運行環境:
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"app

驗證:
cd /usr/local/hadoop
./bin/hadoop versionssh

統計分析熱詞
建立數據源
mkdir input
在這個文件夾裏面放入須要統計分析的數據
cp *.txt input/webapp

統計分析1 單詞出現的頻率
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

統計分析2 某一個關鍵詞出現的頻率,例如 dfs 這個詞前面字母是 h 的出現的頻率
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output1 '(?<=h)dfs'

排錯 1
提示 JAVA_HOME is not set and could not be found
表示 JAVA_HOME 沒有設置
解決方法:
設置 hadoop-env.sh 裏面的 JAVA_HOME 或在運行腳本前面加入前置變量設置
JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre" ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

排錯 2
提示 java.net.UnknownHostException: host: host: unknown error
at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
表示主機名沒有 IP 解析
解決方法:
在 /etc/hosts 裏面增長 主機名 IP 對應關係

排錯 3
提示:17/07/24 23:10:46 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/usr/local/hadoop/output already exists
表示輸出的文件目錄已經存在
解決方法:
刪除已經存在的目錄或更改結果保存位置

僞分佈式配置:

xml 配置格式
<property>
<name>關鍵字</name>
<value>變量值</value>
<description> 描述 </description>
</property>

配置文件路徑 /usr/local/hadoop/etc/hadoop/
1 配置 hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
查找 JAVA_HOME
readlink -f $(which java)

2 配置 core-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/core-default.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>file:///</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>

3 配置 hdfs-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<description> 文件複製份數 </description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>192.168.4.10:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.4.10:50090</value>
</property>
</configuration>

經常使用配置選項
dfs.namenode.name.dir
dfs.datanode.data.dir
dfs.namenode.http-address
dfs.namenode.secondary.http-address
dfs.webhdfs.enabled
dfs.permissions.enabled

4 配置 mapred-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>master:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>

經常使用配置選項
mapreduce.framework.name
mapreduce.jobtracker.http.address
mapreduce.jobhistory.address
mapreduce.jobhistory.webapp.address

5 配置 yarn-site.xml
https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>myhadoop</value>
</property>

<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>


經常使用配置選項
yarn.nodemanager.aux-services
yarn.nodemanager.aux-services.mapreduce.shuffle.class
yarn.resourcemanager.hostname

 

 

思考:NFS如何綁定硬盤使用?


hadoop 徹底分佈式安裝
一、規劃集羣 namenode ,secnedorynamenode, datanode

使用 4 臺機器組件集羣,其中 1臺做爲 master,其餘3臺作爲 node 節點
master 上的角色 namenode , secnedorynamenode
node 上的角色 datanode

master ip => 192.168.4.10
node ip => 192.168.4.{11,12,13}

修改 /etc/hosts ,配置 ip 與名稱的對應關係

禁用防火牆,禁用 selinux

在全部機器上 安裝 java 運行環境 openjdk 和 jps 工具

在機器上設置 ssh-key 信任登陸,保證 master 能登陸全部主機,包括本身

在 master 上安裝配置:
一、把軟件解壓拷貝到 /usr/local/hadoop

二、編輯配置文件

hadoop-env.sh

配置 JAVA_HOME , HADOOP_CONF_DIR

xml 配置格式
<property>
<name>關鍵字</name>
<value>值</value>
<description>描述說明</description>
</property>

core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>

hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

配置 slaves ,寫入全部 datanode 節點
node01
node02
node03

同步全部文件到全部節點

在全部節點上建立 hadoop.tmp.dir 指定的文件夾

在 master 上執行格式化 namenode 的操做
./bin/hdfs namenode -format

啓動集羣
./sbin/start-dfs.sh

驗證集羣:
在 master 上
jps 能看見 namenode ,secondarynamenode
netstat -ltunp 能看見 9000,50070,50090 端口被監聽

在 node 上
jps 能看見 datanode
netstat -ltunp 能看見 50075 被監聽

排錯:
全部的日誌在本機的 logs 裏面,查看對應的角色日誌

經過 web 訪問 hdfs角色
http://192.168.4.10:50070/
http://192.168.4.10:50090/
http://192.168.4.12:50075/

hdfs 基本使用
./bin/hadoop fs -ls /
./bin/hadoop fs mkdir /input
./bin/hadoop fs put *.txt /input

配置 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

配置 yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

配置之後同步到全部機器
啓動服務
./sbin/start-yarn.sh

驗證配置:
在 master 上 jsp 能看見 resourecemanager,而且 netstat 能夠看見 8088 端口打開
能夠訪問 http://master:8088/
在 node 上 jps 能夠看見 nodemanager ,而且 netstat 能夠看見 8042 端口打開
能夠訪問 http://node01:8042/

在集羣上作數據分析
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep hdfs://192.168.4.10:9000/input hdfs://192.168.4.10:9000/output '(?<=h)dfs'

查看分析結果
./bin/hadoop fs -cat hdfs://192.168.4.10:9000/output/*

hdfs 進階應用 NFS 網關
core-site.xml
hadoop.proxyuser.nfsgw.groups
hadoop.proxyuser.nfsgw.hosts
* 表示所有容許

hdfs-site.xml
nfs.exports.allowed.hosts (* rw)
dfs.namenode.accesstime.precision (3600000)
nfs.dump.dir (/tmp/.hdfs-nfs)
nfs.rtmax (4194304)
nfs.wtmax (1048576)
nfs.port.monitoring.disabled (false)

這裏要注意 關閉系統的 portmap 和 nfs 服務添加用戶

重啓 hdfs 集羣服務 ./bin/hdfs dfsadmin -report
啓動 portmap ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
服務
啓動 nfs3 服務
sudo -u 你core-site裏面配置的用戶 ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3

 

zookeeper 安裝

1 禁用防火牆和 selinux
2 設置 /etc/hosts ip 主機名對應關係
3 安裝 openjdk

zookeeper 角色,選舉
leader 集羣主節點
follower 參與選舉的附屬節點
observer 不參與選舉的節點,同步 leader 的命名空間

1 拷貝配置文件
/usr/local/zookeeper/conf/zoo_sample.cfg 到
/usr/local/zookeeper/conf/zoo.cfg

2 修改配置文件
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
server.4=zk4:2888:3888:observer

3 建立目錄 zookeeper 配置文件裏面的 dataDir 指定的目錄
4 在目錄下建立 myid 文件,寫入本身的 id 值
5 啓動集羣,查看角色
/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper/bin/zkServer.sh status

kafka 集羣安裝
1 禁用防火牆和 selinux
2 設置 /etc/hosts ip 主機名對應關係
3 安裝 openjdk
4 安裝 kafka 到 /usr/local/kafka
5 修改配置文件 config/server.properties
broker.id= id值不能相同
zookeeper.connect=zk1:2181,zk4:2181

啓動 kafka
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

驗證:
jps 能看到 kafka
netstat 能看到 9092 被監聽

建立主題
bin/kafka-topics.sh --create --zookeeper zk4:2181 --replication-factor 1 --partitions 1 --topic nsd1703

查看顯示已存在的主題
bin/kafka-topics.sh --list --zookeeper zk4:2181

查看主題的詳細信息
bin/kafka-topics.sh --describe --zookeeper zk1:2181,zk2:2181 --topic nsd1703

生存者發佈信息
bin/kafka-console-producer.sh --broker-list zk1:9092,zk3:9092 --topic nsd1703

消費者消費信息
bin/kafka-console-consumer.sh --zookeeper zk1:2181,zk2:2181 --topic nsd1703 --from-beginning
bin/kafka-console-consumer.sh --bootstrap-server zk1:9092,zk4:9092 --topic nsd1703

from-beginning 是從頭開始消費消息

hadoop 高可用
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>

hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>master2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>master2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/hadoop/journal</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>

同步配置到全部集羣機器
在其中一臺初始化 zookeeper 集羣 bin/hdfs zkfc -formatZK
在定義的節點啓動 journalnode sbin/hadoop-daemon.sh start journalnode
在其中一臺 namenode 上執行格式化命令 bin/hdfs namenode –format
格式化之後把數據目錄拷貝到另外一臺 namenode
初始化 JournalNode ./bin/hdfs namenode -initializeSharedEdits
中止 JournalNode sbin/hadoop-daemon.sh stop journalnode
啓動 dfs ./sbin/start-dfs.sh
驗證配置 bin/hadoop dfsadmin -report
查看集羣狀態 bin/hdfs haadmin -getServiceState nn1 bin/hdfs haadmin -getServiceState nn2
bin/hadoop fs -ls hdfs://mycluster/
bin/hadoop fs -mkdir hdfs://mycluster/input
驗證高可用,關閉 active namenode
sbin/hadoop-daemon.sh stop namenode


<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>
</configuration>

啓動服務,檢查狀態sbin/start-yarn.shbin/yarn rmadmin -getServiceState rm1bin/yarn rmadmin -getServiceState rm2

相關文章
相關標籤/搜索