hadoop_环境配置

本文详细介绍Hadoop单机集群的搭建步骤,包括时间同步、主机名与网络配置、SSH免密登录设置、JDK安装与环境变量配置、Hadoop用户创建及权限设置等,并深入解析核心配置文件如core-site.xml、hdfs-site.xml、mapred-site.xml的配置项。
1 配置时间同步:
指令:crontab -e
编辑:0 1 * * * root /usr/sbin/ntpdate cn.pool.ntp.org 【a进入编辑状态,ctrl+c退出编辑状态 ,:wq保存】
2 配置主机名:vi /etc/sysconfig/network
3 配置网络:
指令:setup --> network configuration-->eth0-->use dhcp空格-->ip netmask
-->ok
/sbin/service network restart #重新启动网络服务
/sbin/ifconfig #检查网络ip配置
4 配置集群hosts列表
vi /etc/hosts
192.168.1.100 master
192.168.1.101 node1
==================================
5 ssh无秘钥登陆
生成公钥和私钥
ssh-keygen -q -t rsa -N "" -f /home/hadoop/.ssh/id_rsa
cd /home/hadoop/.ssh
cp id_rsa.pub authorized_keys
chmod go-wx authorized_keys


6 安装JDK
#下载jdk
wget http://60.28.110.228/source/package/jdk-6u21-linux-i586-rpm.bin
#安装jdk
chmod +x jdk-6u21-linux-i586-rpm.bin
./jdk-6u21-linux-i586-rpm.bin

#配置环境变量
vi /etc/profile.d/java.sh

#复制粘贴一下内容 到 vi 中。
export JAVA_HOME=/usr/java/jdk1.6.0_21/
export HADOOP_HOME=/opt/modules/hadoop/hadoop-1.0.3/
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH


#手动立即生效
source /etc/profile

7 创建hadoop用户及环境
#创建 hadoop 用户
/usr/sbin/groupadd hadoop

#分配 hadoop 到 hadoop 组中
/usr/sbin/useradd hadoop -g hadoop

#创建 hadoop 代码目录结构
mkdir -p /opt/modules/hadoop/

cp hadoop-1.0.3.tar.gz /opt/modules/hadoop/

#创建 hadoop 数据目录结构
mkdir -p /opt/data/hadoop/

#修改 目录结构权限为为hadoop
chown -R hadoop:hadoop /opt/modules/hadoop/
chown -R hadoop:hadoop /opt/data/hadoop/

#解压并测试
cd /opt/modules/hadoop/
tar -xzvf hadoop-1.0.3.tar.gz
hadoop

8 hadoop单机集群配置
vi /opt/modules/hadoop/hadoop-1.0.3/conf/hadoop-env.sh
修改export HADOOP_HEAPSIZE=32

#Hadoop Common组件 配置 core-site.xml
vi /opt/modules/hadoop/hadoop-1.0.3/conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<!--hadoop namenode 服务器地址和端口,以域名形式-->
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/data/hadoop/hdfs/namesecondary</value>
<!--hadoop secondary 数据存储路径,可以配置成多个目录,用,号分隔。-->
</property>
<property>
<name>fs.checkpoint.period</name>
<value>1800</value>
<!-- editlog 每隔 30分钟 触发一次合并 -->
</property>
<property>
<name>fs.checkpoint.size</name>
<value>33554432</value>
<!-- editlog 达到32m的时候触发一次合并 -->
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache
.hadoop.io.compress.BZip2Codec</value>
<!-- 配置 Hadoop 压缩包 -->
</property>

<property>
<name>fs.trash.interval</name>
<value>1440</value>
<description>Hadoop文件回收站,自动回收时间,单位分钟,这里设置是1天。</description>
</property>
</configuration>
#HDFS NameNode,DataNode组建配置 hdfs-site.xml
vi /opt/modules/hadoop/hadoop-1.0.3/conf/hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>dfs.name.dir</name>
<value>/data/hadoop/hdfs/name</value>
<!--HDFS namenode image 文件保存地址-->
<description> </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/hdfs/data</value>
<!-- HDFS数据文件 存储路径,可以配置多个不同的分区和磁盘中,使用,号分隔 -->
<description> </description>
</property>
<property>
<name>dfs.http.address</name>
<value>master:50070</value>
<!---HDFS Web查看主机和端口-->
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>node1:50090</value>
<!--辅控HDFS web查看主机和端口-->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<!--HDFS数据保存份数,通常是3-->
</property>
<property>
<name>dfs.datanode.du.reserved</name>
<value>1073741824</value>
<!-- datanode 写磁盘会预留 1G空间 给其他程序使用,而非写满,单位 bytes->
</property>
<property>
<name>dfs.block.size</name>
<value>134217728</value>
<!--HDFS数据块大小,当前设置为128M/Block-->
</property>

<property>
<name>dfs.permissions</name>
<value>false</value>
<!-- HDFS 关闭文件权限 -->
</property>
</configuration>
#配置MapReduce - JobTracker TaskTracker 启动配置
vi /opt/modules/hadoop/hadoop-1.0.3/conf/mapred-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
<!--JobTracker rpc主机和端口-->
</property>
<property>
<name>mapred.local.dir</name>
<value>/data/hadoop/mapred/mrlocal</value>
<!--MapReduce 产生的中间文件数据,按照磁盘可以配置成多个-->
<final>true</final>
</property>
<property>
<name>mapred.system.dir</name>
<value>/data/hadoop/mapred/mrsystem</value>
<final>true</final>
<!-- MapReduce的系统控制文件-->
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
<final>true</final>
<!-- 最大map槽位数量,默认是3个 -->
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
<final>true</final>
<!-- 单台机器最大reduce槽位数量 -->
</property>

<property>
<name>io.sort.mb</name>
<value>32</value>
<final>true</final>
<!--reduce排序使用内存大小,默认100M,要小于mapred.child.java.opts-->
</property>

<property>
<name>mapred.child.java.opts</name>
<value>-Xmx64M</value>
<!-- map 和 reduce 进程 JVM 最大内存配置 -->
</property>


<property>
<name>mapred.compress.map.output</name>
<value>true</value>
<!-- map 和 reduce 输出中间文件默认开启压缩 -->
</property>
</configuration>
#Hadoop单机系统,启动执行和异常检查
#创建Hadoop mapred 和 hdfs namenode 和 datanode 目录 在 root 下
mkdir -p /data/hadoop/
chown -R hadoop:hadoop /data/*

#切换到 hadoop 用户下
su hadoop

#创建mapreduce
mkdir -p /data/hadoop/mapred/mrlocal
mkdir -p /data/hadoop/mapred/mrsystem

mkdir -p /data/hadoop/hdfs/name
mkdir -p /data/hadoop/hdfs/data
mkdir -p /data/hadoop/hdfs/namesecondary

#启动 切换到hadoop用户

在root下,配置权限
sudo chmod -R a+w /opt/modules/hadoop/

su hadoop

#格式化文件
/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop namenode -format

#启动 Master node :
/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop-daemon.sh start namenode

#启动 JobTracker:
/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop-daemon.sh start jobtracker

#启动 secondarynamenode:
/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop-daemon.sh start secondarynamenode

#启动 DataNode && TaskTracker:

/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop-daemon.sh start datanode
/opt/modules/hadoop/hadoop-1.0.3/bin/hadoop-daemon.sh start tasktracker

停止,命令相同,将start换为stop

#出现错误可查看日志
tail -f /opt/modules/hadoop/hadoop-1.0.3/logs/*

jps命令,jdk下用来查看一些java相关进程
注意: chmod go-w /data/hadoop/hdfs/data
<think>好的,用户现在想知道HADOOP_PREFIX环境变量的作用和用法。首先,我需要回忆一下Hadoop的相关配置。Hadoop早期版本中确实有这个变量,但后来可能被替换了。记得HADOOP_HOME更常见,但用户提到的是HADOOP_PREFIX,我需要确认两者的区别。 用户提供的引用中有提到配置环境变量,比如引用[3]中设置了JAVA_HOME和PATH,这可能与HADOOP_PREFIX的设置方式类似。另外,引用[4]是关于Hadoop配置文件的,比如yarn-site.xml,虽然不直接相关,但说明用户可能正在配置Hadoop集群,需要了解环境变量的作用。 首先,我需要解释HADOOP_PREFIX是什么。它通常指向Hadoop的安装目录,类似于HADOOP_HOME。在旧版Hadoop中,这个变量用来指定安装路径,让其他组件知道Hadoop的位置。现在可能已经被弃用,但用户可能在维护旧系统或者文档中遇到它。 接下来,作用方面,HADOOP_PREFIX帮助Hadoop脚本和命令找到必要的库和配置文件。比如,启动HDFS或YARN时,系统需要知道Hadoop的安装位置来访问bin和sbin目录。同时,这个变量可能影响Classpath的生成,确保运行时能找到正确的JAR文件。 用法方面,用户需要正确设置这个变量,通常是在/etc/profile或者用户的bashrc中导出,然后通过source命令使其生效。还需要检查Hadoop的配置文件,如hadoop-env.sh,是否引用了这个变量。可能需要结合HADOOP_CONF_DIR来指定配置目录的位置。 另外,用户可能遇到版本差异的问题。比如,Hadoop 2.x可能还在使用HADOOP_PREFIX,而3.x可能转向HADOOP_HOME。需要提醒用户检查他们的Hadoop版本,并参考官方文档。如果用户升级过Hadoop,可能需要更新环境变量。 还需要考虑用户的实际应用场景。他们可能在部署Hadoop集群时遇到问题,比如命令找不到或配置错误。正确的环境变量设置可以避免这些问题。例如,在HA集群部署中(如引用[1]提到的),确保所有节点的环境变量一致非常重要。 可能用户遇到了Hadoop命令无法执行的情况,或者配置文件路径错误。需要指导用户验证环境变量是否正确设置,并通过echo命令检查。同时,建议用户使用绝对路径来避免依赖环境变量带来的问题。 最后,总结HADOOP_PREFIX的重要性,并提醒用户注意版本差异和配置文件的正确性。确保回答结构清晰,步骤详细,帮助用户一步步解决问题,并给出验证方法,避免他们再次遇到类似问题。</think>--- #### **HADOOP_PREFIX 环境变量详解** --- #### **一、定义与作用** $HADOOP_PREFIX$ 是Hadoop生态中**核心路径指示器**,主要用于以下场景: 1. **路径定位**:指定Hadoop安装根目录(替代旧版$HADOOP_HOME$)[^2] 2. **脚本依赖**:Hadoop启动脚本(如`start-dfs.sh`)通过该变量查找`bin`、`sbin`等关键目录 3. **Classpath生成**:自动加载`$HADOOP_PREFIX/share/hadoop`下的JAR文件 4. **配置继承**:与`$HADOOP_CONF_DIR$`配合使用,实现多集群配置切换[^1] --- #### **二、配置方法** ##### **1. 基础配置(Linux环境)** ```bash # 在/etc/profile或~/.bashrc中添加 export HADOOP_PREFIX=/usr/local/hadoop # 指向Hadoop安装路径 export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin ``` ##### **2. 验证生效** ```bash source /etc/profile # 加载配置 echo $HADOOP_PREFIX # 应显示"/usr/local/hadoop" which hdfs # 应返回"$HADOOP_PREFIX/bin/hdfs" ``` ##### **3. 配置文件关联** 在`hadoop-env.sh`中确保引用该变量: ```bash # 文件位置:$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh export HADOOP_PID_DIR=/var/hadoop/pids # 示例:使用变量定义PID存储路径 ``` --- #### **三、版本差异与替代方案** | **Hadoop版本** | **变量使用策略** | |----------------|--------------------------------------| | **1.x/2.x** | 强制要求设置$HADOOP_PREFIX$ | | **3.x+** | 推荐使用$HADOOP_HOME$,但向下兼容[^2] | --- #### **四、典型问题排查** **场景**:执行`hdfs namenode -format`报错`JAVA_HOME not set` ```bash # 解决方案:在hadoop-env.sh中添加JAVA关联配置 export JAVA_HOME=/usr/java/jdk1.8.0_144 # 需与引用[3]中的JDK路径一致 export HADOOP_CLASSPATH=$HADOOP_PREFIX/share/hadoop/common/lib/*:$JAVA_HOME/lib/tools.jar ``` --- #### **五、生产环境最佳实践** 1. **路径标准化**:保持所有集群节点相同的`$HADOOP_PREFIX`路径(如引用[1]中的`/usr/local/src/hadoop`) 2. **权限控制**:确保目录权限正确(参考`chown -R hadoop:hadoop`操作[^1]) 3. **多版本共存**:通过Shell环境切换不同Hadoop版本: ```bash # 示例:快速切换Hadoop 2.1.0和3.3.6 alias hadoop2='export HADOOP_PREFIX=/opt/hadoop-2.10.0' alias hadoop3='export HADOOP_PREFIX=/opt/hadoop-3.3.6' ``` --- #### **六、与相关配置的协作** | **关联配置项** | **协作方式** | |----------------------|--------------------------------------------------| | `yarn-site.xml` | 通过`$HADOOP_PREFIX/etc/hadoop`加载配置文件[^4] | | `core-site.xml` | 路径映射依赖`fs.defaultFS`参数 | | `hadoop-env.sh` | 定义内存分配等JVM参数 | --- #### **七、操作验证示例** ```bash # 验证HDFS服务启动 $ hdfs --daemon start namenode # 成功时会创建$HADOOP_PREFIX/logs/hadoop-hadoop-namenode-master.log # 检查Classpath包含性 $ hadoop classpath | tr ':' '\n' | grep '/share/hadoop' /usr/local/hadoop/share/hadoop/common/lib/* /usr/local/hadoop/share/hadoop/common/* ``` --- #### **八、技术演进说明** 在Hadoop 3.0+版本中,建议优先使用`$HADOOP_HOME`变量,其作用与`$HADOOP_PREFIX`完全一致但语义更明确。若同时设置两个变量,系统将以`$HADOOP_HOME`为准[^2]。 --- ### 相关问题 1. 如何在Hadoop集群中统一管理环境变量配置? 2. Hadoop 3.x版本中废弃了哪些关键环境变量? 3. 如何通过环境变量实现Hadoop多版本快速切换?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值