前提,需要有linux环境
一、安装hadoop
1、上传hadoop
我所使用的hadoop是hadoop-2.4.1.tar.gz,将其上传到用户所在目录下,并在用户目录下创建app目录,用于方便管理。将hadoop解压到该目录下
2、hadoop目录说明
进入app中可以看到hadoop-2.4.1的目录,进入看到
bin:可执行文件目录
sbin:系统可执行文件
etc:配置文件
lib:与本地平台相关的库,这里的本地平台是linux
share:核心jar包和文档
二、修改配置文件
配置文件都在etc目录下的hadoop文件夹中
1、hadoop-env.sh中的jdk修改
这个文件整体是不需要改的,但是如果你的jdk是用户自定义安装的而不是全局的,那么很有可能就获取不到,这时候需要修改jdk所在目录,将指定的jdk目录写死在文件中。
2、core-site.xml
指定默认文件系统
指定文件存储根目录
configuration标签默认是空的,添加如下内容
<configuration>
<property>
<name>fs.defaultFS</name>
// ip地址也可以用主机名代替
<value>hdfs://192.168.49.31:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/fangxin/app/hadoop-2.4.1/tmp/</value>
</property>
</configuration>
fs.defaultFS表示默认文件系统
hdfs://192.168.49.31:9000表示是hdfs系统,在31服务器上,监听端口9000
hadoop.tmp.dir指定文件存储根目录,hadoop会在该目录下创建dfs文件目录,namenode创建namenode文件夹,datanode创建datanode文件夹。
如果配置该参数,那么就会以hadoop的tmp作为根目录,而这个目录重启后会清空。
3、hdfs-site.html
副本数量配置
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
目前只有一个节点,所以备份1分
4、mapred-site.xml
目录下有mapred-site.xml.tempate,改为mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
设置mapreduce的默认资源调度框架,我用yarn
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5、yarn-site.xml
yarn框架也是集群,也有主节点和从节点,它的主节点叫resourcemanager
配置
主集群名称
中间数据调度机制,这里用mapreduce_shuffle机制
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value></value>
</property>
</configuration>
6、从机配置slaves(集群配置项)
将要运行的从机的host配置在主机的slaves文件中。这样启动master的时候就会将事先配置的从机启动起来。
如果secondaryNamenode和namenode分离,需要用到配置文件master,否则不需要
hadoop2
hadoop3
其他配置
可以给服务器配置host,这样可以避免使用ip地址
三、启动
配置hadoop环境变量。
如果想用hadoop命令作为全局变量,首先需要配置
// 命令
vi /etc/profile
// 修改内容
JAVA_HOME=/usr/java/jdk1.7.0_79
export HADOOP_HOME=/home/fangxin/app/hadoop-2.4.1
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
格式化namenode
// 命令
hadoop namenode -format
// 格式化过程中会让你回答一次,注意要使用大写的Y
如果成功了,可以看到如下信息
如果报错了,返回步骤二重新检查配置。
成功之后,我们之前在core-site.xml中配置的文件存储目录”tmp”会生成,并且有dfs子目录。
启动hdfs
sbin目录下,执行命令
start-dfs.sh
依次启动了namenode、datanode、secondarynamenode,期间要多次确认身份,按提示做即可。
启动完毕后通过
// 该命令在jdk的bin目录下,java进程统计
jsp
命令查看进程
也可以通过
netstat -nltp
查看每个进程监听的端口是多少
例如:进程25898的namenode监听的为9000端口。有的进程监听的不止一个端口,因为不同的通信使用不同的端口。
启动yarn
start-yarn.sh
启动后可以看到ResourceManager和NodeManager两个进程
hadoop常见命令行
查看文件目录
hadoop fs -ls hdfs://192.168.49.31:9000/ 或者 hadoop fs -ls /注意:如果有以下报错 Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/fangxin/app/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now. 大概是hadoop默认编译的库是32位的。临时办法如下 修改etc下面的hadoop-env.sh 在末尾加上如下两行 export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=$HADOOP_PREFIX/lib" 但仍然有警告: 17/02/08 09:03:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
存入文件
hadoop fs -put 文件名称 hdfs://192.168.49.31:9000/
存入hadoop的文件 在文件存储目录tmp的深处,具体位置在data/current/finalized文件夹中,如果大于128M则会被切分成多部分存储。
- 取出文件
hadoop fs -get /文件名
其中/表示hadoop的根目录,如果在多个目录下,依次寻找即可
- 创建目录
// 创建目录命令
hadoop fs -mkdir /目录a/目录b
- 查看文件
hadoop fs -cat /文件目录/文件名称
MapReduce测试运行
- 统计单词数
1、准备一个文件,可以是文本文件,内容可以是一些单词,例如hello,good等等
2、将准备的文件上传到hadoop空间
3、进入share文件夹下的mapreduce
4、执行jar包 hadoop-mapreduce-example中的wordcount程序
hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /输入目录 /输出目录
如果按步骤执行可以,可以统计出你的文本单词内容
- 计算圆周率
hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 10 10
四、SSH远程登录
由于hadoop底层是通过SSH远程授权认证的,所以如果我们不配置SSH密钥的话,就需要不停地通过输入密码执行各种远程操作,非常麻烦。即使是单节点的本地hadoop操作。
什么是SSH:Secure Shell(安全外壳协议)。从一台linux主机登录到另一台linux主机上去。
linux的SSH配置步骤:
1、本地生成密钥对
2、远程scp拷贝公钥到服务端
3、服务端,在.ssh目录下创建文件
$ touch authorized_keys
4、追加公钥信息到上述文件中
// 追加信息操作
$ cat ~/id_rsa.pub >authorized_keys
5、authorized_keys文件必须只能是该用户可读可写,其他用户组都是无权的状态才能生效。
$ chmod 600 authorized_keys
6、从客户端远程登录,如果不要密码,说明配置成功
$ ssh 服务端名称
模仿上述配置,虽然伪分布式只有单节点,也可以配置本地的SSH协议,启动和关闭hadoop就都不需要密码了