文章目錄
容器使用
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: 三 3月 4 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
2020年 03月 04日 星期三 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