hadoop 阿里云伪分布式配置


伪分布式配置(主要问题是阿里云安全组规则一定要配置,其次是vim /etc/hosts  里面是内网ip对应主机名,vim slaves  是外网ip对应主机名)
输入ifconfig
查看内网ip地址
hadoop 阿里云伪分布式配置
其中inet addr后即为内网ip
由于我买的阿里云系统是Ubuntu  所以关闭防火墙操作如下  centos关闭操作与此不同
输入ufw disable  (关闭防火墙)
Firewall stopped and disabled on system startup 
输入sudo ufw status  (查看防火墙状态)
Status: inactive  (表示已关闭)
配置hosts文件的时候,本机用内网ip和主机名映射,并添加其他机器的公网ip和主机名的映射。)
输入vim /etc/hosts  

127.0.0.1    localhost
172.19.155.254  zzz
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

(inet addr:172.19.155.254 hostname -i 显示真实ip)


ssh免密登录   一直回车
ssh -****** -t rsa  (多个设备同样操作)

cd ./ssh

ssh-copy-id -i ~/.ssh/id_rsa.pub zzz(多个设备同样操作)


xshell与xftp5使用问题不再描述
我这里下载的是jdk-8u11-linux-i586.tar.gz 和hadoop-2.9.0
对于下载jdk和hadoop安装包问题不再描述(下载的位数一定要跟系统位数相匹配,系统位数查看  命令行输入 uname -a)
新建 /user存放jdk和hadoop安装包
tar -zxvf jdk-8u11-linux-i586.tar.gz -C /user(解压下载的jdk到/user目录,这里是在本机下载用xftp5上传到云平台)
hadoop下载解压同理  
都解压后配置环境变量
vim /etc/profile  

export JAVA_HOME=/user/jdk1.8.0_11
export PATH=$JAVA_HOME/bin:$PATH
#设置环境变量

source /etc/profile (表示不用重启直接应用当前更改的环境变量)

vim /etc/profile 

export HADOOP_HOME=/user/hadoop-2.9.0
export PATH=$HADOOP_HOME/bin:$PATH

source /etc/profile
查看java路径
echo $JAVA_HOME
vim hadoop-env.sh    

${JAVA_HOME}改为 /user/jdk1.8.0_11


:wq 强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。这两者一般情况下没什么不一样,但是在编程方面,对编辑源文件可能会产生重要影响。因为文件即使没有修改,":wq"强制更新文件的修改时间,这样会让make编译整个项目时以为文件被修改过了,然后就得重新编译链接生成可执行文件。这可能会产生让人误解的后果,当然也产生了不必要的系统资源花销。
切换到hadooop目录
cd /user/hadoop-2.9.0/etc/hadoop 
ls 可以看有哪些文件
配置core-site.xml

vim core-site.xml

<configuration>
      <property>
          <name>fs.default.name</name>
          <value>hdfs://zzz:8020</value>
   </property>
<property>
            <name>hadoop.tmp.dir</name>
            <value>/user/tmp</value>
    </property>
</configuration>
Namenode,所在的机器9000端口是早期Hadoop 1.x使用的,现在 Hadoop 2.x使用的是8020端口号用于节点直接内部通信,使用RPC 通信机制)


配置hdfs-site.xml   
vim  hdfs-site.xml
<property>
          <name>dfs.replication</name>
          <value>1</value>
</property>(默认是3这里配置1,伪分布式)
  <property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
</configuration>

要创建tmp目录
mkdir /user/tmp

输入cd 回车直接退到原始目录
执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称
echo  输出一串字符串 或者输出变量存的值

配置 yarn-site.xml
 vim yarn-site.xml
<property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
  <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>zzz</value>
      </property>

配置mapred-site.xml.template
是个模板 需要拷贝一份 
需要先cp mapred-site.xml.template mapred-site.xml
然后vim  mapred-site.xml

<property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
  <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>zzz</value>
      </property>

vim slaves  
这里 前面是外网地址 然后是主机名
47.100.42.75  zzz 


这部分用不到:第二步:分发安装包  scp -r  ~/user  [email protected]:~/
                    scp -r  ~/user  [email protected]:~/
                    scp ~/.bash_profile [email protected]:~/
                    scp ~/.bash_profile [email protected]:~/ 
一个机器安装其他直接分发   也可以解压再分发  用户名都一样 机器名设置的不一样 分发完要在各个机器上生效 source  ~/.bash_profile)


第二步:namenode格式化:只要在主节点执行hdfs namenode -format(namenode写成name)(这里Y要大写)
在这个目录下格式化/user/hadoop-2.9.0/bin
hadoop 阿里云伪分布式配置
出现 common.Storage 即成功 表是存储路径
/bin/hdfs namenode -format
 
启动hadoop集群 在
/user/hadoop-2.9.0/sbin
目录下 运行 start-all.sh    ./start-all.sh     
./hadoop-daemon.sh start  namenode
./hadoop-daemon.sh start datanode(这是单独启动)
cd /user/hadoop-2.9.0/sbin/ 
./start-all.sh 
./start-dfs.sh 启动hdfs
还有个可以分别单独启动的 不再赘述
./stop-all.sh这是全部停止

验证 否成功启动
方式1:
执行是如下进程
cd     
jps
19744 NameNode
20195 ResourceManager(前两个主)
20051 SecondaryNameNode
20628 Jps
19879 DataNode
20302 NodeManager(后两个从)
datanode进程起不来问题,就是jps查看进程之后少一个datanode。
rm -rf /user/tmp/
这个路径是在前面core-site.xml 配置文件中对应的路径。然后重新启动。
namenode进程起不来。
rm -rf /user/tmp/
hadoop namenode -format
重新格式化namenode之后再重新启动。
(每次重新格式化都要:如果dfs文件夹中没有重要的数据,那么删除dfs文件夹,再重新运行下列指令: (删除所有节点下的dfs文件夹,dfs目录在${HADOOP_HOME}/tmp/)
hadoop namenode -format
sbin/start-dfs.sh)

(如果有后面的zzz001 zzz002 只有后面两个
 DataNode
 NodeManager)

更改配置文件后4步走 先stop然后删除rm -rf /user/tmp/  然后格式化namenode 然后start

端口连接排查:
netstat -ant查看端口
一定要配置安全组规则 50070  8088  在阿里云 安全组规则 添

加安全组规则里 入和出都要配置 (:50070连接超时解决办

法)


hadoop 阿里云伪分布式配置
公网ip:50070/dfshealth.html
47.100.42.75:50070/dfshealth.html
http://47.100.42.75:8088/cluster




1.对hdfs操作的命令格式是hadoop fs 
1.1 -ls 表示对hdfs下一级目录的查看 
1.2 -lsr 表示对hdfs目录的递归查看 
1.3 -mkdir 创建目录 
1.4 -put 从linux上传文件到hdfs 
1.5 -get 从hdfs下载文件到linux 
1.6 -text 查看文件内容 
1.7 -rm 表示删除文件 
1.7 -rmr 表示递归删除文件
wordcount测试
新建data文件夹
cd /user/hadoop-2.9.0
输入hadoop fs -mkdir /data/input
通过xftp5在linux中新建一个1.txt文件  随便搜一篇英文短文保存进去 
然后
hadoop fs -put /user/test/1.txt /data/input 放进去
hadoop fs -ls /data/input可以看到里面多了一个文件
18/05/03 20:01:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r--   1 root supergroup        801 2018-05-03 20:01 /data/input/1.txt
然后切换到
cd /user/hadoop-2.9.0/share/hadoop/mapreduce
然后输入
hadoop jar hadoop-mapreduce-examples-2.9.0.jar wordcount /data/input /data/result
如果发现最开始某些地方配置错误 需要停止hadoop然后重新格式化namenode
MapReduce执行是不允许输出目录存在的,自动创建
执行完毕后
hadoop fs -ls /data/result
Found 2 items
-rw-r--r--   1 root supergroup          0 2018-05-03 20:02 /data/result/_SUCCESS
-rw-r--r--   1 root supergroup        792 2018-05-03 20:02 /data/result/part-r-00000
第一个文件表示成功

hadoop fs -cat /data/result/part-r-00000
可以查看运行结果
Look    1
After    1
Finally,    1
His    1
Johnson    4
Mr.    4
They    1
Those    1
We're    1
a    5
about    2
accepting.    1
accidents,    1
aerophane    1
again,    1
air    1
这个wordcount没有那么智能,它只是按空格来分辨是不是一个单词的。