先决条件:必须保证集群的及其在同一个IP 段,否则无法创建集群
准备
0.以下将以node1、node2两台服务器为例搭建一个集群,以node1为主节点,将namenode等安装在node1上,datanode安装在node1、node2
1.安装java,设置JAVA_HOME等
sudo apt-get install sun-java6-jdk1.2.3
2.设置ssh,保证主节点可以不要密码登录其他节点
sudo apt-get install ssh
在主节点生成密钥队,并将公钥复制到其他节点
ssh-keygen -t rsa scp ~/.ssh/id_rsa.pub node2:~/.ssh
在各节点节点上执行(包括node1)
cd ~/.ssh; cat id_rsa.pub >> authorized_keys
然后ssh登录各节点测试,保证无需密码即可登录
安装hadoop
1.安装hadoop
wget http://apache.mirrors.tds.net/hadoop/common/stable/hadoop-2.5.1.tar.gz tar -xzf hadoop-2.5.1.tar.gz
2.配置,在主节点修改以下配置,并拷贝到其他节点
namenode配置 conf/masters/core-site.xml
将node1设置为namenode节点
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node1:49000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop_home/var</value> </property> </configuration>
hdfs配置 conf/masters/hdfs-site.xml
<?xmlversion="1.0"?> <?xml-stylesheettype="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.name.dir</name> <value>/home/hadoop/name1, /home/hadoop/name2</value> #hadoop的name目录路径 <description> </description> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/data1, /home/hadoop/data2</value> <description> </description> </property> <property> <name>dfs.replication</name> <!-- 不能多于节点数量--> <value>2</vaue> </property> </configuration>
master节点配置,将node1配置为master,conf/masters/masters
node1
slave节点配置,将node1、node2配置为slave,conf/masters/slaves
node1
node2
3 启动服务
在NameNode上格式化一个文件系统
./bin/hadoop namenode -format
启动所有节点
./sbin/start_all.sh
也可以使用./sbin/start_hdfs.sh 单独启动hdfs
使用./sbin/stop_all.sh 关闭所有节点
4.查看服务运行情况
可以在http://node1:50070 查看运行情况
使用以下命令在文件系统中创建文件
./bin/hdfs dfs -ls / #列出根目录下的文件 ./bin/hdfs dfs -mkdir /user #创建/user ./bin/hdfs dfs -mkdir /user/hadoop #创建hadoop用户的home目录 ./bin/hdfs dfs -ls #列出home目录下的文件 ./bin/hdfs dfs -put test #将test文件放入home目录下 将本地文件./test 放入hdfs ~/目录 ./bin/hdfs dfs -cat test #查看/user/hadoop/test
5.添加节点
在新节点上安装hadoop后,在namenode上将新节点地址加入到slaves配置中,并将namenode上的配置文件拷贝一份到新节点,然后在namenode上使用start-all.sh启动服务
HDFS常用操作
hadoop dfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式
超时时间配置
某节点down之后,集群系统需要在一定时间内确认该节点失效,可以在hdfs_site.xml中配置
<!-- 超时检测 timeout = interval (ms) * 2 + 10 * interval.heartbeat (s) -->
<property>
<name>heartbeat.recheck.interval</name>
<value>5000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>