Mac上安装Apache套件教程

安装

Mac上有Homebrew神器,安装这些东西都是一条命令的事情,麻烦的是配置。首先在Mac上安装Homebrew和Java。然后通过下面的命令,分别安装Hadoop、Hive、Spark以及可能需要用到的Scala和sbt。

1
2
3
4
5
$ brew install hadoop
$ brew install hive
$ brew install apache-spark
$ brew install scala
$ brew install sbt

配置和使用

安装很简单,配置很麻烦,主要是一开始很多参数都不知道是什么意思,就是跟着别人教程改,现在了解了其中一些参数的意思,但还是有一些不了解,所以遇到了很多坑。下面所有的配置都是针对伪分布式配置的,就是实际上就只有你本地一台电脑,但是假装是分布式的集群。

Hadoop配置

到目录/usr/local/Cellar/hadoop/[your_version]/libexec/etc/hadoop下:

  • 修改core-site.xml这个文件中tag\的value,这个tag是指定Hadoop的存放临时文件的路径,默认值是/tmp/hadoop-${user.name},但是在Mac上,tmp这个目录的会在电脑重启后自动清除,所以这会造成每次重启电脑都会导致Hadoop的文件丢失而无法正常启动,每次都得先format,而且hdfs上的数据会丢失。所以一定要把这个值设置成一个不会自动清除的路径。我自己就在当前目录下新建了一个文件夹tmpdir,设置成了/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/tmpdir。

  • 找到hdfs-site.xml或者自己新建一个这个文件,将如下内容添加进去。

    1
    2
    3
    4
    5
    6
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>

这个地方设置的参数的意思是一个文件在hdfs中保存多少份备份,可以用来防止数据意外丢失。

  • 如果要使用yarn模式,还有一些东西需要配置,参见官方教程。但是这个教程有一个地方没有说清楚,导致reduce会卡住不动,应该是因为reduce的工作节点找不到map工作节点导致的,参考了这篇博客的方法解决了,但是我不懂其中的原理。做法很简单,就是在/etc/hosts中添加一行

    1
    127.0.0.1 你的计算机名

你的Mac的计算机名一般可以在系统偏好设置->共享->电脑名称下面那行小字找到,一般为your_username-MacBook-Pro.local。

Hadoop使用

具体教程可以参见官方教程,下面简单介绍一下:

  • 第一次使用需要format:

    1
    $ hadoop namenode -format

这个命令具体执行了什么我也不知道,反正就是初始化,只需要执行一次(如果参考上一节设置好了tmpdir)。

  • 到目录/usr/local/Cellar/hadoop/your_version/sbin下执行:

    1
    2
    ./start-all.sh #启动Hadoop
    ./stop-all.sh #停止Hadoop
  • Hadoop的Web UI是用浏览器访问http://localhost:8088/

Hive配置

参考了这篇博客,用的是内嵌模式(embedded),该模式使用Derby服务器存储(完全不知道这些是什么)。
到目录/usr/local/Cellar/hive/your_version/libexec/conf下:

  • 配置hive-env.sh文件

    1
    $ cp hive-env.sh.template hive-env.sh

然后修改该文件的相应内容:

1
2
3
4
5
6
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.0
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/Cellar/hive/2.1.0/libexec/conf
# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/Cellar/hive/2.1.0/libexec/lib
  • 配置hive-site.xml,修改该文件的相应内容:

    1
    2
    3
    4
    5
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
    </property>

这里设置的路径其实是hdfs中的路径,是仓库在hdfs上的路径。

1
2
3
4
5
6
7
8
9
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/usr/local/Cellar/hive/2.1.0/libexec/conf/metastore_db;create=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>

其中databaseName可以是任何绝对路径,上面只是我指定的metastore的读取位置,如果不设置的话,默认会在hive命令执行的目录下去读取,如果没有metastore文件就会新建一个,这个会导致你在很多目录下都新建了不同的数据库,指定一个绝对路径的话可以保证你每次无论在哪个路径下执行hive都能连接到同一个数据库。

Hive使用

  • 在目录/usr/local/Cellar/hive/your_version/bin下,执行schematool -dbType derby -initSchema来初始化(derby模式是这样的)。
  • 然后在任何路径下(如果按照上一节设置了metastore的读取路径),执行$ hive命令就可以打开hive的命令行窗口了。但是上面所设置的derby模式只能同时连接一个客户,也就是说如果你在一个窗口打开了hive,你在另一窗口再用hive命令就会报错。mysql模式可以参考这篇博客

Spark配置

Spark没什么可配置的,如果你要在Spark中使用Hive的话,就要把上面提到的core-site.xml、hdfs-site.xml、hive-site.xml放到Spark的设置目录/usr/local/Cellar/apache-spark/your_version/libexec/conf下。如果要用yarn-cluster模式运行要连接Hive的程序,就在在spark-submit命令中加入参数–files,然后在后面加上hive-site.xml的路径。这个参数是把文件发送到各个节点上。(这里我突然有个疑问,derby模式下是不允许多用户连接hive的,那cluster模式下有多个节点都要连接hive那会出什么问题?这个地方我还是不太明白,但是我用上面这个方法去运行我的程序时没发现这样的问题。对这里面的具体机制完全不了解,这些东西的配置真的好复杂。)

Spark使用

使用的话可以使用spark-shell,也可以用spark-submit,还可以用/usr/local/Cellar/apache-spark/your_version/libexec/sbin路径下的脚本start-all.sh来启动spark,并用浏览器访问http://localhost:8080来进入Spark的Web UI。