hadoop 笔记
- sbin: 一些启动脚本 【服务端的 server bin】
- logs: 存放 hadoop 相关日志
- bin: 客户端的脚本
- etc: hadoop 相关的配置文件
格式化文件系统
配置免密码登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 启动 namenode
# sbin/hadoop-daemon.sh start namenode
# 启动 datanode
# sbin/hadoop-daemon.sh start datanode
# 格式化文件系统, 硬盘啥的会被清除掉
bin/hdfs namenode -format
sbin/start-dfs.sh
jps
# jps 查看进程是否启动
# 没启动,因为默认 hadoop 是没有配置好的, 可以看 logs文件
配置 启动
参考官方文档
hadoop 支持伪分布式环境使用,也就是 单个节点就能跑,不需要跑多个机器
参考博客
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
web界面使用
我是在 ubuntu 虚拟机里面使用的,这里关闭一下防火墙才能访问
sudo ufw status
sudo ufw disable
# 访问web界面: http://192.168.56.103:9870/dfshealth.html#tab-overview
hadoop 文件操作命令
文件上传
文件上传
- copyFromLocal 将本地文件拷贝到 hdfs 里面
# -moveFromLocal 会把本地的文件给删除掉
hadoop fs -copyFromLocal bashrc_bak /bashrc
# 追加文件内容到 文件最后
hadoop fs -appendToFile bashrc_bak /bashrc
java代码操作 hdfs的接口
创建文件夹
将 localhost:9000 修改 为 0.0.0.0 , 不然 宿主机可能无法连上虚拟机的 hdfs端口
<configuration> │<configuration>
<!--指定namenode的地址--> │ <!--指定namenode的地址-->
<property> │ <property>
<name>fs.defaultFS</name> │ <name>fs.defaultFS</name>
<value>hdfs://0.0.0.0:9000</value> │ <value>hdfs://0.0.0.0:9000</value>
</property> │ </property>
<!--用来指定使用hadoop时产生文件的存放目录--> │ <!--用来指定使用hadoop时产生文件的存放目录-->
</configuration>
@SpringBootTest
class HadoopxApplicationTests {
@Test
void contextLoads() throws IOException, URISyntaxException, InterruptedException {
System.out.println("hello world");
Configuration conf = new Configuration();
var fs = FileSystem.get(new URI("hdfs://ubuntu:9000"), conf, "root");
boolean isSuccess = fs.mkdirs(new Path("/tmpdir"));
System.out.println(isSuccess);
Assert.assertEquals(true, isSuccess);
if (fs != null) {
fs.close();
}
}
}