在Ubuntu客户端上,需提前安装Java(Hadoop依赖)和SSH(集群通信):
sudo apt update
sudo apt install -y openjdk-11-jdk
java -version # 验证安装(需显示Java版本信息)
sudo apt install -y openssh-server
sudo service ssh start
从Apache官网下载与集群版本一致的Hadoop二进制包(如3.3.6),解压到指定目录(如/usr/local):
wget https://downloads.apache.org/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local/
配置环境变量,将Hadoop路径添加到PATH中:
echo 'export HADOOP_HOME=/usr/local/hadoop-3.3.6' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc
验证Hadoop安装:
hadoop version # 应显示Hadoop版本信息
Hadoop客户端需通过配置文件连接集群,主要修改core-site.xml和hdfs-site.xml(文件位于$HADOOP_HOME/etc/hadoop/目录):
fs.defaultFS值)。<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode-ip:9000</value> <!-- 替换为集群NameNode的实际IP和端口 -->
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> <!-- 根据集群需求调整 -->
</property>
</configuration>
若需通过脚本或命令行频繁操作集群,建议配置客户端到集群所有节点的SSH免密登录:
ssh-keygen -t rsa # 生成本地密钥对(直接回车,默认路径)
ssh-copy-id user@namenode-ip # 将公钥复制到NameNode(替换user为集群用户名,namenode-ip为NameNode IP)
ssh-copy-id user@datanode1-ip # 重复操作所有DataNode
ssh user@namenode-ip # 测试免密登录(无需密码)
通过Hadoop命令行或API连接集群:
hadoop fs命令操作HDFS(如上传、下载文件)。# 查看HDFS根目录
hadoop fs -ls /
# 上传本地文件到HDFS
hadoop fs -put /home/user/localfile.txt /hdfs/remote/path/
# 下载HDFS文件到本地
hadoop fs -get /hdfs/remote/path/remotefile.txt /home/user/local/
hdfs库编程操作HDFS(需安装pip install hdfs)。from hdfs import InsecureClient # 非安全模式使用InsecureClient
# 初始化客户端(替换为集群NameNode的IP和端口)
client = InsecureClient('http://namenode-ip:50070', user='hdfs-user')
# 创建HDFS目录
client.makedirs('/test_dir')
# 上传本地文件到HDFS
with open('/home/user/localfile.txt', 'rb') as local_file:
client.upload('/test_dir', local_file)
# 列出HDFS目录内容
print(client.list('/test_dir'))
jps命令查看NameNode进程)、网络是否可达(ping namenode-ip)、防火墙是否放行端口(sudo ufw allow 9000)。core-site.xml中的hadoop.security.authentication为kerberos,并提供keytab文件。core-site.xml、hdfs-site.xml)与集群配置一致。通过以上步骤,Ubuntu客户端可成功连接HDFS集群并进行文件操作。