msgbartop
很傻很天真的程序员
msgbarbottom

07 八 10 linux配置环境变量的三种方法

1. 修改/etc/profile文件
  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。
·用文本编辑器打开/etc/profile
·在profile文件末尾加入:
[java]
JAVA_HOME=/usr/share/jdk1.5.0_05
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
[/java]
·重新登录
·注解
a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录
b. linux下用冒号“:”来分隔路径
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值
在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种
常见的错误。
d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。
e. export是把这三个变量导出为全局变量。
f. 大小写必须严格区分。

2. 修改.bashrc文件
这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

·用文本编辑器打开用户目录下的.bashrc文件
·在.bashrc文件末尾加入:

set JAVA_HOME=/usr/share/jdk1.5.0_05
export JAVA_HOME
set PATH=$JAVA_HOME/bin:$PATH
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH

·重新登录

3. 直接在shell下设置变量

不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

只需在shell终端执行下列命令:

export JAVA_HOME=/usr/share/jdk1.5.0_05
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

07 八 10 解决hadoop安装出现找不到JAVA_HOME的问题

除了官方的hadoop版本外,cloudera.com也发布自己的hadoop版本。据说yahoo 负责hadoop开发的某个哥们跳槽到cloudera.com(hugo告诉我的)。为此,我把hadoop从官方的hadoop-0.20.1换成cloudera.com的hadoop-0.20.1+152.tar.gz,再加上hive-0.4.0+14.
配置方法跟官方的版本一致,具体请参考前边的文章或者网上的文档。可以当我配置好以后,运行start-all.sh时,确出现如下的报错:
======================================================================+
| Error: JAVA_HOME is not set and Java could not be found |
+———————————————————————-+
| Please download the latest Sun JDK from the Sun Java web site |
| > http://java.sun.com/javase/downloads/ < |
| |
| Hadoop requires Java 1.6 or later. |
| NOTE: This script will find Sun Java whether you install using the |
| binary or the RPM based installer. |
+======================================================================+
明明在hadoop-env.sh设置好了,为了保险,又在/etc/profile设置了一遍。以hadoop用户登陆系统,在任意路径执行echo $JAVA_HOME ,显示"/usr/local/jdk",是我服务器jdk正确的路径啊!再查一下文档,云:需要jdk1.6以上的版本,我使用的是jdk1.6.0_16,应该符合要求的。

那问题又会在哪里呢?grep一把,看那些文件包含字符串JAVA_HOME.先搜hadoop/conf,只有hadoop-env.sh包含这个字串。再换一个目录hadoop/bin,查看一下,其输出如下:
[root@hadoops2 hadoop]# grep JAVA_HOME bin/*bin/hadoop:export JAVA_HOME=/usr/local/jdkbin/hadoop:# JAVA_HOME The java implementation to use. Overrides JAVA_HOME.
bin/hadoop:if [ "$JAVA_HOME" != "" ]; then
bin/hadoop: #echo "run java in $JAVA_HOME"
bin/hadoop: JAVA_HOME=$JAVA_HOME
bin/hadoop:if [ "$JAVA_HOME" = "" ]; then
bin/hadoop: echo "Error: JAVA_HOME is not set."
bin/hadoop:JAVA=$JAVA_HOME/bin/java
bin/hadoop:CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
bin/hadoop-config.sh:if [ -z "$JAVA_HOME" ]; then
bin/hadoop-config.sh: export JAVA_HOME=$candidate
bin/hadoop-config.sh: if [ -z "$JAVA_HOME" ]; then
bin/hadoop-config.sh:| Error: JAVA_HOME is not set and Java could not be found |
bin/rcc:# JAVA_HOME The java implementation to use. Overrides JAVA_HOME.
bin/rcc:if [ "$JAVA_HOME" != "" ]; then
bin/rcc: #echo "run java in $JAVA_HOME"
bin/rcc: JAVA_HOME=$JAVA_HOME
bin/rcc:if [ "$JAVA_HOME" = "" ]; then
bin/rcc: echo "Error: JAVA_HOME is not set."
bin/rcc:JAVA=$JAVA_HOME/bin/java
bin/rcc:CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar

嘿!好几个文件都与JAVA_HOME相关呢。接着挨个查看文件,感觉hadoop-config.sh这个文件嫌疑最大,其内容刚好有一段与运行hadoop报错内容相一致,我把程序片段贴在下面:
# attempt to find java
if [ -z "$JAVA_HOME" ]; then
for candidate in \
/usr/lib/jvm/java-6-sun \
/usr/lib/j2sdk1.6-sun \
/usr/local/jdk \
/usr/java/jdk1.6* \
/usr/java/jre1.6* \
/Library/Java/Home ; do
if [ -e $candidate/bin/java ]; then
export JAVA_HOME=$candidate
break
fi
done
# if we didn't set it
if [ -z "$JAVA_HOME" ]; then
cat 1>&2 < +======================================================================+
| Error: JAVA_HOME is not set and Java could not be found |
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site |
| > http://java.sun.com/javase/downloads/ < |
| |
| Hadoop requires Java 1.6 or later. |
| NOTE: This script will find Sun Java whether you install using the |
| binary or the RPM based installer. |
+======================================================================+
EOF
exit 1
fi
fi
我在这段中间加如行 ” /usr/local/jdk \”,然后在运行,一切就正常了!

作者:田逸(sery@163.com) from http://blog.formyz.org/?p=140

Analytics Plugin created by Web Hosting

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress