hadoop笔记
jdk配置
一先删除系统自带的jdk
1、which java
/usr/bin/java Linux系统自带的jdk
java -version 发现有OpenJDK,,,,说明是自带jdk
删除自带JDK: rm -rf /usr/bin/java
二、配置用户自己的JDK
1、上传jdk包并且解压:
tar -zxvf jdk-7u79-linux-x64.tar.gz
2、修改配置文件 sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:
PATH=$PATH:$JAVA_HOME/bin:
3、刷新配置文件:source /etc/profile
4、which java 查看当前系统使用的jdk:~/jdk1.7.0_79/bin/java
三、运行Hadoop单机版
1、上传Hadoop包并且解压
2、Hadoop目录要属性的目录:share、etc、bin/sbin
3、配置java环境变量(Hadoop框架用java开发)
4、给Hadoop框架配置jdk
vi /opt/hadoop/etc/hadoop/hadoop-env.sh
将export JAVA_HOME=${JAVA_HOME} 修改为
export JAVA_HOME=/opt/jdk
5、运行测试
集群搭建准备
1.1 HADOOP集群搭建
1.1.1集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起
HDFS集群:
负责海量数据的存储,集群中的角色主要有 NameNode / DataNode
YARN集群:
负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager
(那mapreduce是什么呢?它其实是一个应用程序开发包)
1.1.2服务器准备
本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:
ü Vmware 11.0
ü Centos 6.5 64bit
1.1.3网络环境准备
ü 采用NAT方式联网
ü 网关地址:192.168.42.1
ü 3个服务器节点IP地址:192.168.42.128、192.168.42.129、192.168.42.131、
ü 子网掩码:255.255.255.0
1.1.4服务器系统设置
ü 添加HADOOP用户
Useradd hadoop
Passwd hadoop
ü 为HADOOP用户分配sudoer权限
**为用户配置sudo权限,该用户才能使用sudo
用root编辑 vi /etc/sudoers
在文件的如下位置,为hadoop添加一行即可
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
#如果需要用户hadoop使用sudo命令时不输入密码,则是输入以下一句:
hadoop ALL=(ALL) NOPASSWD:ALL
ü 同步时间: sudo date -s "00:00:00"
ü 设置主机名:sudo vi /etc/sysconfig/network
n hdp-qm-01
n hdp-qm-02
n hdp-qm-03
ü 配置内网域名映射:sudo vi /etc/hosts
n 192.168.42.128 hdp-qm-01
n 192.168.42.129 hdp-qm-02
n 192.168.42.131 hdp-qm-03
n
ü 配置防火墙
# service iptables start
#service iptables status
#service iptables stop
# chkconfig iptables --list
# chkconfig iptables off
# service iptables save
1.1.4 使用SSH协议免登陆远程计算机
计算机A每次SSH远程连接计算机B时,都需要输入密码。当有些软件需要频繁使用SSH连接其他计算机时,这个时候需要人工填写计算机B的密码,这个会造成大量无用操作,不利于程序的使用。
在为了避免这类问题的发生,而且也要兼顾安全问题(设置SSH免密码登陆后,SSH这台计算就不需要密码即可登陆,存在安全隐患),使用公钥和私钥方式解决SSH免密码登陆问题,而且只在一边做,另一边不做,这样也达到了安全的问题。一般是那台机器需要SSH远程其他机器,就在这台机器上设置SSH免登陆操作。
"公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)。然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了。
ssh 无密码登录要使用公钥与私钥。linux下可以用ssh-keygen生成公钥/私钥对。
//设置免密码ssh 方式一 选其一
# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
# scp ~/.ssh/authorized_keys slave1:/root/.ssh/
# scp ~/.ssh/authorized_keys slave2:/root/.ssh/
//设置免密码ssh 方式二 选其一
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub master@root
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1@root
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2@root
//设置免密码ssh 方式三 选其一 (推荐方式三)
ssh-keygen -t rsa
ssh-copy-id hadoop@ hdp-qm-01
ssh-copy-id hadoop@ hdp-qm-02
ssh-copy-id hadoop@ hdp-qm-03
ssh-copy-id pj@hdp-pj-01
不管是root还是普通用户环境下头执行执行就可以了!
1.1.5 Jdk环境安装
n 上传jdk安装包
n 规划安装目录 /home/hadoop/jdk1.7.0_79
n 解压安装包
n 配置环境变量 /etc/profile
注意:把jdk安装包发送给其他节点:
scp -r jdk1.7.0_79 hadoop@hdp-qm-02:/home/hadoop/
scp -r jdk1.7.0_79 hadoop@hdp-qm-03:/home/hadoop/
也可以发送环境变量过去:
sudo scp /etc/profile root@hdp-qm-02:/etc/
sudo scp /etc/profile root@hdp-qm-03:/etc/
刷新系统环境变量配置文件: source /etc/profile
Hadoop集群下的全分布式的安装
三个节点的集群案例(5个节点学生完成)
主机名称 | 备注 | IP地址 | 功能 |
hdp-qm-01 | Master | 192.168.42.128 | NameNode、DataNode、ResourceManager、NodeManager |
hdp-qm-02 | Slave | 192.168.42.129 | DataNode、NodeManager、SecondaryNameNode |
hdp-qm-03 | Slave | 192.168.42.131 | DataNode、NodeManager |
所有机子都需要配置 1.JDK 2.SSH免登陆 3.Hadoop集群 |
Hadoop集群搭建:cd /home/hadoop/hadoop-2.6.0/etc/hadoop/
修改hadoop-env.sh文件
将hadoop-env.sh文件中的
export JAVA_HOME=${JAVA_HOME}
或者
export JAVA_HOME= /home/hadoop/jdk1.7.0_79
修改core-site.xml文件
<property>
<name>fs.defaultFS</name>
<!--配置hdfs系统的地址-->
<value>hdfs://hdp-qm-01:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6.0/hadoopdata/tmp</value>
</property>
修改hdfs-site.xml文件
<property>
<!--副本数3-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--hadoop2.x默认数据块大小是128M-->
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!--NameNode节点存储元数据的位置-->
<value>file:///home/hadoop/hadoop-2.6.0/hadoopdata/dfs/name</value>
</property>
<property>
<!--DataNode节点存储数据块的位置-->
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop-2.6.0/hadoopdata/dfs/data</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///home/hadoop/hadoop-2.6.0/hadoopdata/checkpoint/dfs/cname</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///home/hadoop/hadoop-2.6.0/hadoopdata/checkpoint/dfs/cname</value>
</property>
<property>
<!--hdfs系统的web地址-->
<name>dfs.http.address</name>
<value>hdp-qm-01:50070</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hdp-qm-02:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
修改mapred-site.xml文件
命令如下:
# mv mapred-site.xml.template mapred-site.xml
#vi mapred-site.xml
<property>
<!--配置执行计算模型时使用yarn资源调度器-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<!--配置MapReduce框架的历史服务的地址-->
<name>mapreduce.jobhistory.address</name>
<value>hdp-qm-01:10020</value>
</property>
<property>
<!--配置MapReduce框架的历史服务的地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>hdp-qm-01:19888</value>
</property>
修改yarn-site.xml
<property>
<!--配置resourcemanager服务的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hdp-qm-01</value>
</property>
<property>
<!--配置mapreduce的shuffle服务的地址-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hdp-qm-01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hdp-qm-01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdp-qm-01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdp-qm-01:8033</value>
</property>
<property>
<!--配置resourcemanager的web访问地址-->
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-01:8088</value>
</property>
#vi slaves
将所有需要配置成slave类型的机器的机器名写在其内部即可.
注意:每个机器名占一行。
hdp-qm-01
hdp-qm-02
hdp-qm-03
#vi /etc/hadoop/master
Master文件存的是的secondarynamenode列表
# vi master
hdp-qm-02
//将配置好的Hadoop文件夹发送给slave1和slave2机子
#scp -r hadoop-2.6.0 hadoop@hdp-qm-02:/home/hadoop/
#scp -r hadoop-2.6.0 hadoop@hdp-qm-03:/home/hadoop/
配置Hadoop框架的环境变量:
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile
发送hadoop的环境变量到其他节点:
scp /etc/profile root@hdp-qm-02:/etc/
scp /etc/profile root@hdp-qm-03:/etc/
//启动Hadoop集群
//启动之前先格式化,只需要一次即可(在NameNode节点)
#hadoop namenode -format
//启动namenode、datanode、ResourceManager、NodeManager节点
# start-dfs.sh
# start-yarn.sh
常用命令参数介绍
-help 功能:输出这个命令参数手册 |
-ls 功能:显示目录信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 备注:这些参数中,所有的hdfs路径都可以简写 -->hadoop fs -ls / 等同于上一条命令的效果 |
-mkdir 功能:在hdfs上创建目录 示例:hadoop fs -mkdir -p /aaa/bbb/cc/dd |
-moveFromLocal 功能:从本地剪切粘贴到hdfs 示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd -moveToLocal 功能:从hdfs剪切粘贴到本地 示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt |
--appendToFile 功能:追加一个文件到已经存在的文件末尾 示例:hadoop fs -appendToFile ./hello.txt hdfs://hadoop-server01:9000/hello.txt 可以简写为: Hadoop fs -appendToFile ./hello.txt /hello.txt
|
-cat 功能:显示文件内容 示例:hadoop fs -cat /hello.txt
-tail 功能:显示一个文件的末尾 示例:hadoop fs -tail /weblog/access_log.1 -text 功能:以字符形式打印一个文件的内容 示例:hadoop fs -text /weblog/access_log.1 |
-chgrp -chmod -chown 功能:linux文件系统中的用法一样,对文件所属权限 示例: hadoop fs -chmod 666 /hello.txt hadoop fs -chown someuser:somegrp /hello.txt |
-copyFromLocal à -put 功能:从本地文件系统中拷贝文件到hdfs路径去 示例:hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/ -copyToLocal à -get 功能:从hdfs拷贝到本地 示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz |
-cp 功能:从hdfs的一个路径拷贝hdfs的另一个路径 示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-mv 功能:在hdfs目录中移动文件 示例: hadoop fs -mv /aaa/jdk.tar.gz / |
-get 功能:等同于copyToLocal,就是从hdfs下载文件到本地 示例:hadoop fs -get /aaa/jdk.tar.gz -getmerge 功能:合并下载多个文件 示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,... hadoop fs -getmerge /aaa/log.* ./log.sum |
-put 功能:等同于copyFromLocal 示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
|
-rm 功能:删除文件或文件夹 示例:hadoop fs -rm -r /aaa/bbb/
-rmdir 功能:删除空目录 示例:hadoop fs -rmdir /aaa/bbb/ccc |
-df 功能:统计文件系统的可用空间信息 示例:hadoop fs -df -h /
-du 功能:统计文件夹的大小信息 示例: hadoop fs -du -s -h /aaa/*
|
-count 功能:统计一个指定目录下的文件节点数量 示例:hadoop fs -count /aaa/
|
-setrep 功能:设置hdfs中文件的副本数量 示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz <这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量>
|
- hadoop/bin 存放常用命令,如hadoop,hdfs等。
- Hadoop/data 存放本地hdfs系统的信息
- hadoop/etc 目录下有一个hadoop目录,主要存放hadoop生态系统的配置文件
- hadoop/include 对外提供的编程头文件,主要是使用C++编写mapredurce程序是使用
- hadoop/lib 存放本地库
- hadoop/libexec 几个服务对应shell脚本的存放目录
- hadoop/logs 日志文件
- hadoop/sbin 主要脚本目录,主要用于hdfs和yarn的开启和关闭
- hadoop/share 存放文档和静态jar包