hadoop僞分佈式環境配置

容器使用

win10 docker下命令

docker run -tdi  -p 8088:8088  -p 9000:9000 -p 9864:9864 -p 9866:9866 -p 9867:9867 -p 9870:9870 -p 19888:19888 -p 50100:50100 -p 50105:50105 --hostname localhost  --privileged -e "container=docker"   --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init  | docker exec  hadoopweifb /bin/bash -c ' /starthadoop.sh  '

linux 下啓動hadoop命令

(docker run -tdi   -p 9000:9000 -p 9864:9864  -p 9870:9870  --hostname localhost  --privileged -e "container=docker"   --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init ) && (docker exec -d hadoopweifb /bin/bash -c '  /starthadoop.sh ')

想要觀察啓動過程可以 刪除掉 docker exec -d 的 -d 參數

然後就可以訪問 ip:12345 端口 使用hadoop了

java 鏈接容器並操作

常見報錯1

報錯There are 1 datanode(s) running and 1 node(s) are excluded in t
端口沒有打開完,

dfs.namenode.secondary.http-address	0.0.0.0:9868	The secondary namenode http server address and port.
dfs.namenode.secondary.https-address	0.0.0.0:9869	The secondary namenode HTTPS server address and port.
dfs.datanode.address	0.0.0.0:9866	The datanode server address and port for data transfer.
dfs.datanode.http.address	0.0.0.0:9864	The datanode http server address and port.
dfs.datanode.ipc.address	0.0.0.0:9867	The datanode ipc server address and port.

把這些端口全部打開

寫入中文有亂碼

如果使用
FSDataOutputStream  對象的 writebetys() 會出現中文亂碼
請更換爲 write(str對象.getBytes());
org.apache.hadoop.fs.FSDataOutputStream a = fileSystem.create(filepath1);
fileSystem.setReplication(filepath1, (short) 1);
a.write(inner.getBytes());

備份數不足

fileSystem.setReplication(filepath1, (short) 1);
設置文件備份數爲 1

python 鏈接容器並操作

這裏注意 python 鏈接 hdfs 使用的是 9870 hadoop3 namenode http 端口

import pyhdfs
fs_conn=pyhdfs.HdfsClient(hosts="localhost:9870",user_name="hadoop")
fs_conn.listdir('/')
#fs_conn 是一個 <pyhdfs.HdfsClient at 0x203d1d787b8>
#輸出:【】

以下是構建過程

不想自己構建的,直接拖拽使用就好了

遇到的一個環境變量bug解決

從外部直接啓動docker 容器遇到以下問題, 容器內 ssh 服務未啓動

Last login:34 17:34:31 CST 2020 on pts/6
Starting datanodes
localhost: ssh: connect to host localhost port 22: Connection refused

嘗試啓動ssh服務,又得到了另一個錯誤

Failed to get D-Bus connection: No such file or directory

解決方法
爲docker 添加參數 --privileged -e “container=docker”

(docker run -tdi  -p 22345:12345  --privileged -e "container=docker"   --name  hadoopweifb10   registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init ) && (docker exec  hadoopweifb10 /bin/bash -c '  systemctl start sshd.service && source /etc/profile && nohup start-all.sh & ')

D-BUS爲了兩個特定情況而設計:
同一個桌面會話中兩個桌面應用程序的通信,可使得桌面會話作爲整體集成在一起以解決進程生命週期的相關問題。 桌面會話和操作系統的通信,這裏操作系統一般而言包括內核和系統守護進程。
退出docker後
$ docker run --privileged -ti -e “container=docker” centos7-base /usr/sbin/init

構建容器

拖取 centos:ssh鏡像

docker run -tdi  -P  --privileged=true    --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/centos:ssh init

進入容器檢查配置

 docker exec -it hadoopweifb /bin/bash

檢查字體

locale
字體正常
LC_ALL=zh_CN.UTF-8

查看ssh服務有沒有運行,

ps -ef | grep ssh
如果有,可以看到類似以下內容:
root       142     1  0 16:06 ?        00:00:00 /usr/sbin/sshd -D
root       199   142  0 16:09 ?        00:00:00 sshd: root@pts/1,pts/2
root       215   199  0 16:09 ?        00:00:00 /usr/libexec/openssh/sftp-server
root      1122   765  0 16:12 pts/3    00:00:00 grep --color=auto ssh

檢查時間

[root@abd518ea708e /]# date
20200304日 星期三 16:12:56 CST

一切正常

更新一下鏡像源

CentOS7更換鏡像源

#先安裝wget
yum install -y wget

#下載CentOS 7的repo文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#進行更新鏡像源

#清除緩存
yum clean all
#生成緩存
yum makecache
#最後執行命令
yum -y update
yum -y upgrade

配置java 環境

yum -y install java-devel
安裝完成輸出
java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin 

生成ssh密鑰

 ssh-keygen -t rsa
 成功生成密匙
 Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

直接重新配置本地免密登錄

如果找不到 chattr 命令

yum install e2fsprogs
touch /root/.ssh/authorized_keys

bash ssh not found

yum -y install openssh-clients
(chattr -i /root/.ssh/authorized_keys) && (rm -rf /root/.ssh) && (mkdir /root/.ssh) && (ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa) && (cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys) && (chmod 700 ~/.ssh) && (chmod 644 ~/.ssh/authorized_keys) && (ssh localhost -o StrictHostKeyChecking=no)

檢測本地免密登陸是否成功

ssh localhost
Last login: Wed Mar  4 16:44:05 2020 from localhost

搭建僞分佈式環境

修改容器主機名稱爲localhost,這是一個大坑!!

hadoop 所有搭建工作完成以後,但是無法創建文件

在這裏插入圖片描述
在這裏插入圖片描述
解決辦法一

在每次啓動容器的時候指定IP、hostname、往/etc/hosts裏添加hosts,命令如下:

docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32  -d -P -p 50070:50070 -p 8088:8088 hadoop:master

解決辦法而

hostnamectl set-hostname localhost

vi sbin/vi start-dfs.sh vi stop-dfs.sh
vi start-yarn.sh vi stop-yarn.sh

HDFS_DATANODE_SECURE_USER=hdfs

HDFS_DATANODE_SECURE_USER=yarn

搭建命令

docker run -tdi  -P  --privileged=true    --name  hadoopweifb   registry.cn-hangzhou.aliyuncs.com/mkmk/centos:bendimianmi init

修改主要配置文件

cd /cloudcomput/hadoop-3.2.1/etc/hadoop
/cloudcomput/hadoop-3.2.1/etc/hadoop/core-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/mapred-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/yarn-site.xml

將本地hadoop cp到容器

docker cp C:/Users/73444/Desktop/linuxInstallationPackage/hadoop-3.2.1.tar.gz   hadoopweifb:/cloudcomput/hadoop-3.2.1.tar.gz 
cd /cloudcomput
tar -zxvf  hadoop-3.2.1.tar.gz 

修改

vim hadoop-env.sh
38行左右
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

配置hadoop環境變量

vi   /etc/profile
export HADOOP_HOME=/cloudcomput/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存後生效配置

source /etc/profile

修改執行權限

在Hadoop安裝目錄下找到sbin文件夾

cd /cloudcomput/hadoop-3.2.1/sbin

1、對於start-dfs.sh和stop-dfs.sh文件,添加下列參數:

vi /cloudcomput/hadoop-3.2.1/sbin/start-dfs.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2、對於start-yarn.sh和stop-yarn.sh文件,添加下列參數:

vi /cloudcomput/hadoop-3.2.1/sbin/start-yarn.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-yarn.sh
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

重新開始start…就可以。

格式化namenode:

hadoop namenode -format 
第一次配置需要初始化
啓動hadoop:
hadoop start-all.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章