导航:首页 > 编程语言 > snappyjava

snappyjava

发布时间:2022-10-08 01:42:44

① spark加载hadoop本地库的时候出现不能加载的情况要怎么解决

Spark采用Scala语言实现,使用Scala作为应用框架。与Hadoop不同的是,Spark和Scala紧密集成,Scala像管理本地collective对象那样管理分布式数据集。

Spark支持分布式数据集上的迭代式任务,实际上它可以在Hadoop文件系统上与Hadoop一起运行,这是由第三方集群框架Mesos实现的。Spark由加州大学伯克利分校开发,用于构建大规模、低延时的数据分析应用。

Spark集群计算架构

Spark是一种类似于Hadoop的新型集群计算框架。不同的是,Spark用于特定工作负载类型的集群计算,这种计算在多个并行操作之间重用工作数据集(如机器学习算法)。为了优化这种类型的计算,Spark引入基于内存的集群计算,即将数据集缓存在内存中,减少访问延迟。

Spark还引入了一个抽象概念,即弹性分布式数据集RDD(resilient distributed datasets )。RDD是一个分布在一组节点之间的只读的对象集合。这些集合是弹性的,即能够在部分数据集丢失的情况下重建。重建部分数据集的过程需要一种维护血统(lineage,即重建部分数据集所需的信息,说明数据是根据什么过程产生的)的容错机制支持。一个RDD可以是:(1)一个从文件创建的Scala对象,或(2)一个并行切片(分布在各个节点之间),或(3)从其他RDD转换得来,或(4)改变已有RDD的持久性,如请求将已有RDD缓存在内存中。

Spark应用称为driver,实现单个节点或一组节点上的操作。与Hadoop一样,Spark支持单节点和多节点集群。对于多节点操作,Spark依附于Mesos集群管理器。Mesos为分布式应用提供了有效的资源共享和隔离的平台(见图1)。这种配置允许Spark与Hadoop共用一个节点共享池。

图1 Spark依赖于Mesos集群管理器实现资源共享和隔离

Spark编程模型

Driver在数据集上执行两种操作:行为(action)和转换(transformation)。action,即在数据集上执行计算,并向driver返回一个值;transformation,即从已有数据集创建新的数据集。例如,执行Rece操作(使用某个函数)、遍历数据集(即在每个元素上执行一个函数,类似Map操作),属于action;Map操作、Cache操作(即请求新的数据集缓存在内存中),属于transformation。

下面我们将简单介绍一下这两种操作的实例。不过首先熟悉一下Scala语言。

Scala简介

很多着名网站都使用Scala,像Twitter,LinkedIn,及Foursquare(其web应用框架叫Lift)。此外,有证据表明金融机构也对Scala的性能感兴趣(例如使用EDF Trading进行衍生工具定价)。

Scala是一种多范式的编程语言,支持命令式、函数式和面向对象的编程范式。从面向对象的角度来看,Scala中的每个值都是一个对象。同理,从函数式编程的角度来看,每个函数也都是一个值。Scala还是一种静态类型语言,其类型系统表达能力强且安全。

此外,Scala还是一种虚拟机语言,Scala编译器生成字节码,使用JRE2直接在java虚拟机(JVM)上运行。这样,Scala可以在几乎任何支持JVM的地方运行(需要增加Scala运行时库),并使用已有的Java库和Java代码。

最后,Scala是可扩展的,可以以库的形式轻易无缝地集成到其他语言中去。

Scala实例

现在我们来看看Scala的几个实例。Scala有自己的解释器,可以交互式地使用它。本文不对Scala语言进行具体论述,可以参考这里。

清单1 使用解释器快速了解一下Scala语言。启动Scala之后,出现命令提示符,你就可以在交互模式下评估表达式和程序。创建变量有两种方式,一是使用val创建不可变变量(称为单一赋值的变量),二是使用var创建可变变量。如果试图对val变量进行更改,将提示错误。

清单1 Scala中的变量

$ scala

Welcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).

Type in expressions to have them evaluated.

Type :help for more information.

scala> val a = 1

a: Int = 1

scala> var b = 2

b: Int = 2

scala> b = b + a

b: Int = 3

scala> a = 2

<console>6: error: reassignment to val

a = 2

^

接下来,定义一个简单的函数,计算一个Int类型的平方并返回这个值。使用def定义函数,后面紧跟函数名和参数列表。不需要指定返回值,函数本身可以推断出返回值。注意,这与变量赋值操作类似。这里我演示了在3这个对象上执行这个函数,返回一个名为res0的结果变量(该变量是Scala解释器自动创建的)。见清单2。

清单2 Scala中的函数

scala> def square(x: Int) = x*x
square: (x: Int)Int
scala> square(3)
res0: Int = 9
scala> square(res0)
res1: Int = 81

接着,我们看看如何在Scala中创建简单的类(见清单3)。定义一个简单的类Dog,接受String类型的参数(相当于构造器)。注意这里类直接接受参数,而不需要在类主体中定义这个类参数。类中只有一个打印该字符串的函数。创建一个类的实例,然后调用这个函数。注意解释器会插入一些竖线,它们不是代码的一部分。

清单3 Scala中的类

scala> class Dog( name: String ) {
| def bark() = println(name + " barked")
| }
defined class Dog
scala> val stubby = new Dog("Stubby")
stubby: Dog = Dog@1dd5a3d
scala> stubby.bark
Stubby barked
scala>

完成工作以后,只需要敲入:quit就可以退出Scala解释器。

安装Scala和Spark

首先下载和配置Scala。清单4给出了Scala的下载命令,并准备安装。根据Spark文档,这里使用2.8版本。

清单4 Scala安装

$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz
$ sudo tar xvfz scala-2.8.1.final.tgz --directory /opt/

为了使Scala可见,将以下语句添加到.bashrc文件中(假设你使用Bash):

export SCALA_HOME=/opt/scala-2.8.1.finalexport PATH=SCALAHOME/bin:PATH

然后按照清单5测试安装。这组命令加载bashrc文件,然后快速测试了Scala解释器。

清单5 配置并在交互模式下运行Scala

$ scala

Welcome to Scala version 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).

Type in expressions to have them evaluated.

Type :help for more information.

scala> println("Scala is installed!")

Scala is installed!

scala> :quit

$

现在可以看到Scala命令提示符了,输入:quit退出。注意Scala在JVM上下文中执行,所以还需要JVM。我用的是Ubuntu,默认自带了OpenJDK。

接下来,根据清单6获取最新的Spark框架。

清单6 下载和安装Spark框架

$ wget https://github.com/mesos/spark/tarball/0.3-scala-2.8/mesos-spark-0.3-scala-2.8-0-gc86af80.tar.gz
$ sudo tar xvfz mesos-spark-0.3-scala-2.8-0-gc86af80.tar.gz

然后,设置Spark配置文件 ./conf/spar-env.sh,添加SCALA_HOME环境变量:

export SCALA_HOME=/opt/scala-2.8.1.final

最后,使用简单构建工具(sbt, simple build tool)更新Spark。sbt是Scala的构建工具,Spark中也使用它。在mesos-spark-c86af80子目录下执行更新和编译:

$ sbt/sbt update compile

注意这一步需要连接到互联网。完成以后,按照清单7测试一下Spark。这个测试例子运行SparkPi计算pi的估计值(在单位正方形中随机取点)。命令格式是示例程序(spark.examples.SparkPi),加上主机参数(即定义Mesos master)。本例实在localhost上运行,因为这是一个单节点集群。注意清单7执行了两个任务,但是它们是顺序执行的(任务0结束后任务1才开始)。

② java.lang.RuntimeException: Error in configuring object

1,可能是Hadoop调不到MyMapper,MyRecer造成的,试着在命令行里加了-file选项,运行的命令变成:../hadoop-0.20.0/bin/hadoop jar ../hadoop-0.20.0/contrib/streaming/hadoop-0.20.0-streaming.jar -file ./MyMapper -mapper ./MyMapper -file ./MyRecer -recer ./Recer -input doc -output test-outpu

2,解决方法,用ant编译一下工程,然后再运行

③ 坑爹的Apache hbase 64位机装配Snappy终于成功了怎么解决

1.安装基本tool
yum install gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3,svn

yum Error: Cannot retrieve repository metadata (repomd.xml) for repository: xxxxx

so vim /etc/yum.repos.d/xxxxx.repo

将项[flexbox]中的enabled=1改为enabled=0

解决yum源的问题。

2.安装Snappy
下载snappy
wget http://snappy.googlecode.com/files/snappy-1.1.1.tar.gz
然后解压后,执行三步骤:
./configure
make
sudo make install
默认安装路径:/usr/local/lib下面

检查安装是否成功
ls /usr/local/lib/libsn*

3.安装hadoop-snappy
3.1下载hadoop-snappy源码
svn checkout http://hadoop-snappy.googlecode.com/svn/trunk/ hadoop-snappy
3.2.安装hadoop-snappy
cd hadoop-snappy
mvn package

4.hadooo中部署snappy
解压hadoop-snappy-0.0.1-SNAPSHOT.tar.gz文件,会生成hadoop-snappy-0.0.1-SNAPSHOT目录,拷贝这个目录下相关文件到$HADOOP_HOME/lib/native/linux-amd64-64
cp -r /hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/* $HADOOP_HOME/lib/native/Linux-amd64-64
将target目录下的hadoop-snappy-0.0.1-SNAPSHOT.jar拷贝到$HADOOP_HOME/lib/目录下。
修改三个文件:
hadoop-env.sh,增加内容如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/
修改core-site.xml文件,增加红色字体部分
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>

5.往HBase中使用压缩方式
当hadoop的snappy配置成功后,配置hbase就很简单了,两个步骤:
第一步骤复制相关jar包
cp -r $HADOOP_HOME/lib/native/Linux-amd64-64/* $HBASE_HOME/lib/native/Linux-amd64-64/*
这里需要注意下,有些版本在安装过程中,没有这个Linux-amd64-64这个目录,需要手工创建下。
第二步骤配置hbase-env.sh环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/

export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd64-64/:/usr/local/lib/

6、重启Hadoop、HBase 检查安装是否成功
cd $HBASE_HOME/bin
./hbase org.apache.hadoop.hbase.util.CompressionTest /tmp/testfile snappy
结果:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

坑爹的Apache官网提供的是32位编译的,在64位服务器上会有问题。官方竟然没有提供64位版本,要使用得自己编译。

7.编译hadoop2.2.0

7.1 yum install cmake zlib1g-dev pkg-config libssl-dev

7.2 安装protobuf-2.5.0

很多博客的protobuf的安装都是shit.不知道他们实践过没有,老是来去。
下载protobuf-2.5.0.tar.gz,解压。

sudo vim /etc/profile
#protobuf
export PROTOC_HOME=/opt/protobuf-2.5.0

export PATH=$PATH:$PROTOC_HOME/src

source /etc/profile
$protoc --version
libprotoc.2.5.0
ok就这样。根本不需要什么configure --prefix,make,make install这么麻烦,也不成功。

7.3 下载hadoop2.2.0源码

Download Hadoop sources.
Patch sources:
cd hadoop-2.2.0-src
wget https://issues.apache.org/jira/secure/attachment/12614482/HADOOP-10110.patch
patch -p0 < HADOOP-10110.patch

maven国外服务器可能连不上,maven配置一下国内镜像,在maven目录下,conf/settings.xml,在<mirrors></mirros>里添加,原本的不要动
<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexusosc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
同样,在<profiles></profiles>内新添加
<profile>
<id>jdk-1.7</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>

7.4 编译mvn package -Pdist,native -DskipTests -Dtar -rf :hadoop-common

编译完成了后,cd hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0

file 一下native下面的so文件

将 native/*再cp 到$hadoop_home/bin的各个data node的native/* 和native/Linux-amd64-64下。

重新运行测试,结果

④ 如何安装hadoop本地压缩库

Hadoop安装配置snappy压缩

[一]、 实验环境

CentOS 6.3 64位

Hadoop 2.6.0

JDK 1.7.0_75

[二]、 snappy编译安装

2.1、下载源码

到官网 http://code.google.com/p/snappy/ 或者到 https://github.com/google/snappy
下载源码,目前版本为 1.1.1。

2.2、编译安装

解压 tar -zxvf snappy-1.1.1.tar.gz ,然后以 root 用户 执行标准的三步进行编译安装:

/configure

make

make install

默认是安装到 /usr/local/lib ,这时在此目录下查看:

[hadoop@micmiu ~]$ ls -lh /usr/local/lib |grep snappy

-rw-r--r-- 1 root root 229K Mar 10 11:28 libsnappy.a

-rwxr-xr-x 1 root root 953 Mar 10 11:28 libsnappy.la

lrwxrwxrwx 1 root root 18 Mar 10 11:28 libsnappy.so ->
libsnappy.so.1.2.0

lrwxrwxrwx 1 root root 18 Mar 10 11:28 libsnappy.so.1 ->
libsnappy.so.1.2.0

-rwxr-xr-x 1 root root 145K Mar 10 11:28 libsnappy.so.1.2.0

安装过程没有错误同时能看到上面的动态库,基本表示snappy 安装编译成功。

[三]、Hadoop snappy 安装配置

3.1、hadoop 动态库重新编译支持snappy

hadoop动态库编译参考:Hadoop2.2.0源码编译 和 Hadoop2.x在Ubuntu系统中编译源码 ,只是把最后编译的命令中增加
-Drequire.snappy :

1mvn package -Pdist,native -DskipTests -Dtar -Drequire.snappy

把重新编译生成的hadoop动态库替换原来的。

3.2、hadoop-snappy 下载

目前官网没有软件包提供,只能借助 svn 下载源码:

1svn checkout http://hadoop-snappy.googlecode.com/svn/trunk/
hadoop-snappy

3.3、hadoop-snappy 编译

1mvn package [-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR]

PS:如果上面 snappy安装路径是默认的话,即 /usr/local/lib,则此处
[-Dsnappy.prefix=SNAPPY_INSTALLATION_DIR] 可以省略,或者
-Dsnappy.prefix=/usr/local/lib

编译成功后,把编译后target下的 hadoop-snappy-0.0.1-SNAPSHOT.jar 复制到 $HADOOP_HOME/lib
,同时把编译生成后的动态库 到 $HADOOP_HOME/lib/native/ 目录下:

1cp -r
$HADOOP-SNAPPY_CODE_HOME/target/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64
$HADOOP_HOME/lib/native/

3.4、编译过程中常见错误处理

① 缺少一些第三方依赖

官方文档中提到编译前提需要:gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set,
Maven 3

②错误信息:

[exec] libtool: link: gcc -shared
src/org/apache/hadoop/io/compress/snappy/.libs/SnappyCompressor.o
src/org/apache/hadoop/io/compress/snappy/.libs/SnappyDecompressor.o
-L/usr/local/lib -ljvm -ldl -m64 -Wl,-soname -Wl,libhadoopsnappy.so.0 -o
.libs/libhadoopsnappy.so.0.0.1

[exec] /usr/bin/ld: cannot find -ljvm

[exec] collect2: ld returned 1 exit status

[exec] make: *** [libhadoopsnappy.la] Error 1

或者

[exec] /bin/sh ./libtool --tag=CC --mode=link gcc -g -Wall -fPIC -O2 -m64
-g -O2 -version-info 0:1:0 -L/usr/local/lib -o libhadoopsna/usr/bin/ld: cannot
find -ljvm

[exec] collect2: ld returned 1 exit status

[exec] make: *** [libhadoopsnappy.la] Error 1

[exec] ppy.la -rpath /usr/local/lib
src/org/apache/hadoop/io/compress/snappy/SnappyCompressor.lo
src/org/apache/hadoop/io/compress/snappy/SnappyDecompressor.lo -ljvm -ldl

[exec] libtool: link: gcc -shared
src/org/apache/hadoop/io/compress/snappy/.libs/SnappyCompressor.o
src/org/apache/hadoop/io/compress/snappy/.libs/SnappyDecompressor.o
-L/usr/local/lib -ljvm -ldl -m64 -Wl,-soname -Wl,libhadoopsnappy.so.0 -o
.libs/libhadoopsnappy.so.0.0.1

[ant] Exiting
/home/hadoop/codes/hadoop-snappy/maven/build-compilenative.xml.

这个错误是因为没有把安装jvm的libjvm.so 链接到
/usr/local/lib。如果你的系统时amd64,可以执行如下命令解决这个问题:

1ln -s /usr/java/jdk1.7.0_75/jre/lib/amd64/server/libjvm.so
/usr/local/lib/

[四]、hadoop配置修改

4.1、修改 $HADOOP_HOME/etc/hadoop/hadoop-env.sh,添加:

1export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/

4.2、修改 $HADOOP_HOME/etc/hadoop/core-site.xml:

XHTML

io.compression.codecs

org.apache.hadoop.io.compress.GzipCodec,

org.apache.hadoop.io.compress.DefaultCodec,

org.apache.hadoop.io.compress.BZip2Codec,

org.apache.hadoop.io.compress.SnappyCodec

4.3、修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml 中有关压缩属性,测试snappy:

XHTML

maprece.map.output.compress

true

maprece.map.output.compress.codec

org.apache.hadoop.io.compress.SnappyCodec[五]、测试验证

全部配置好后(集群中所有的节点都需要动态库和修改配置),重启hadoop集群环境,运行自带的测试实例
wordcount,如果maprece过程中没有错误信息即表示snappy压缩安装方法配置成功。

当然hadoop也提供了本地库的测试方法 hadoop checknative :

[hadoop@micmiu ~]$ hadoop checknative

15/03/17 22:57:59 INFO bzip2.Bzip2Factory: Successfully loaded &
initialized native-bzip2 library system-native

15/03/17 22:57:59 INFO zlib.ZlibFactory: Successfully loaded &
initialized native-zlib library

Native library checking:

hadoop: true
/usr/local/share/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0

zlib: true /lib64/libz.so.1

snappy: true
/usr/local/share/hadoop/lib/native/Linux-amd64-64/libsnappy.so.1

lz4: true revision:99

bzip2: true /lib64/libbz2.so.1

openssl: true /usr/lib64/libcrypto.so

⑤ 本地库的时候出现不能加载的情况要怎么解决

资源库引导文件丢失所致,卸载助手,重启后在安装即可。

⑥ spark加载hadoop本地库的时候出现不能加载的情况要怎么解决

主要是jre目录下缺少了libhadoop.so和libsnappy.so两个文件。具体是,spark-shell依赖的是scala,scala依赖的是JAVA_HOME下的jdk,libhadoop.so和libsnappy.so两个文件应该放到$JAVA_HOME/jre/lib/amd64下面。这两个so:libhadoop.so和libsnappy.so。前一个so可以在HADOOP_HOME下找到,如hadoop\lib\native。第二个libsnappy.so需要下载一个snappy-1.1.0.tar.gz,然后./configure,make编译出来,编译成功之后在.libs文件夹下。当这两个文件准备好后再次启动sparkshell不会出现这个问题。

⑦ 如何使用java snappy压缩文件

使用下面命令
tar -zcvf target.tgz source/
tar -jcvf target.tar.bz2 source/
tar打包,gzip压缩,bzip2压缩
man tar,man gzip,man bzip 具有例子及解释,关于linux命令的使用情况,我最近在看一本书籍,不过是电子版的《linux就该这么学》,明年3月份即将出版,你到时可以购买一本好好看看,关于命令的参数讲解得非常的详细。

⑧ 错误: 找不到或无法加载主类 Djava.library.path=.usr.hadoop.hadoop-2.8.0.lib:.

最近,打算Hbase建表用snappy压缩时,碰到一些Hadoop本地库的问题。其实这些问题是一直存在的,只是不影响正常使用,就没有引起重视。这次希望彻底解决以下问题:
问题一:执行start-dfs.sh时出现以下日志
xxxx: Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.4.0/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.
xxxx: It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
这是因为官网提供的版本本地库是32位的,在64位主机环境下无法执行。需要下载hadoop源码进行编译(如何编译源码可以上网搜索),编译成功后,找到native下的文件拷贝到${HADOOP_HOME}/lib/native目录下即可。
问题二:执行start-dfs.sh时出现以下日志
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在网上找到的所有文章中,都是说在hadoop-env.sh中加入以下两行配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"
但是在测试过程中,加入以上配置还是会提示告警信息,说明本地库未加载成功。
开启debug:
export HADOOP_ROOT_LOGGER=DEBUG,console
执行start-dfs.sh,发现以下日志:
DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: Java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
从日志中可以看出hadoop库不在java.library.path所配置的目录下,应该是java.library.path配置的路径有问题。在hadoop-env.sh中重新配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native/"
执行start-dfs.sh,告警信息不再显示。经测试,其实只需export HADOOP_OPTS即可解决问题。
验证本地库是否加载成功:hadoop checknative
15/08/18 10:31:17 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
15/08/18 10:31:17 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /usr/local/hadoop-2.4.0/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /usr/local/hadoop-2.4.0/lib/native/Linux-amd64-64/libsnappy.so.1
lz4: true revision:99
bzip2: true /lib64/libbz2.so.1
以上说明本地库已经加载成功。

⑨ OushuDB 快速入手

快速入手

本节将通过RPM安装物理机版本的一个Centos/Redhat 7.x单节点集群。假设我们安装的服务器hostname为oushu(可以通过命令:hostname 直接获取,请将文中所有出现的oushu替换为实际的hostname)。此次部署大约需要您30分钟时间。

安装准备

首先使用root登录。 查看有无avx指令:

cat /proc/cpuinfo | grep avx

安装oushu yum源:

#Redhat/CentOS 7.0, 7.1, 7.2系统并且包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

#Redhat/CentOS 7.0, 7.1, 7.2系统但不包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

#Redhat/CentOS 7.3系统并且包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

#Redhat/CentOS 7.3系统但不包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

#Redhat/CentOS 7.4系统并且包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

#Redhat/CentOS 7.4系统但不包含avx指令请配置以下YUM源:

wget -P /etc/yum.repos.d/ $获取的repo url

禁用selinux:

sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/configsetenforce 0

关闭防火墙:

systemctl stop iptablessystemctl disable iptablessystemctl stop firewalldsystemctl disable firewalld

安装Java:

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-develmkdir -p /usr/java//注意查看本机的java版本ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.el7_4.x86_64  /usr/java/default

安装HDFS

安装HDFS并且创建其使用的目录,这里我们假设我们的机器上有两个数据盘,分别mount在/data1和/data2目录,如果您有多块盘,下面的目录创建以及配置文件需要做相应的更改。尤其对HDFS的数据目录以及OushuDB的临时文件目录位置。

#由于hadoop依赖于特定版本的snappy,请先卸载snappy确保安装的顺利进行yum -y remove snappy#安装HDFS RPM,RPM安装会自动创建hdfs用户yum install -y hadoop hadoop-hdfs#在/data1上创建NameNode目录mkdir -p /data1/hdfs/namenode#在每块盘上创建DataNode数据目录,并更改权限mkdir -p /data1/hdfs/datanodechmod -R 755 /data1/hdfschown -R hdfs:hadoop /data1/hdfsmkdir -p /data2/hdfs/datanodechmod -R 755 /data2/hdfschown -R hdfs:hadoop /data2/hdfs

复制下列文件到/etc/hadoop/conf/中(遇到覆盖提示,请输入y,表示确认覆盖)

http://www.oushu.com/docs/ch/_downloads//core-site.xml.

http://www.oushu.com/docs/ch/_downloads//hdfs-site.xml.

http://www.oushu.com/docs/ch/_downloads//hadoop-env.sh.

编辑/etc/hadoop/conf/core-site.xml文件中的fs.defaultFS属性,其他系统通过这个url来访问HDFS,注:在做format之前,请确认已经将core-site.xml中fs.defaultFS的值由oushu替换成hostname。:

<property><name>fs.defaultFS</name><value>hdfs://oushu:9000</value></property>

编辑 /etc/hadoop/conf/hadoop-env.sh,加入下面参数。这些参数配置了Java Home,Hadoop配置文件,日志文件目录,以及JVM选项。根据存储的HDFS数据量大小,需要适当修改NameNode的-Xmx值。HDFS数据量越大,-Xmx值应该设的越大。

export JAVA_HOME="/usr/java/default"

export HADOOP_CONF_DIR="/etc/hadoop/conf"

export HADOOP_NAMENODE_OPTS="-Xmx6144m -XX:+UseCMSInitiatingOccupancyOnly -XX:=70"

export HADOOP_DATANODE_OPTS="-Xmx2048m -Xss256k"

export HADOOP_LOG_DIR=/var/log/hadoop/$USER

因为/etc/hadoop/conf/hdfs-site.xml中默认使用/data1和/data2两块盘,如果你有多块盘,你需要更改dfs.data.dir属性,使得HDFS用到所有盘:

<property><name>dfs.data.dir</name><value>/data1/hdfs/datanode,/data2/hdfs/datanode</value><final>true</final></property>

格式化NameNode,并启动NameNode和DataNode。

注:在format过程中如果询问是否要format,请输入y,表示确认。

sudo -u -E hdfs hdfs namenode -formatsudo -u -E hdfs /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh start namenodesudo -u -E hdfs /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh start datanode

HDFS日志在/var/log/hadoop/hdfs/中。如果因为配置出错,可以查看错误日志,并依据改正。

检查hdfs是否成功运行:

su - hdfshdfs dfsadmin -reporthdfs dfs -mkdir /testnodehdfs dfs -put /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh /testnode/hdfs dfs -ls -R /

你也可以查看HDFS web界面:http://oushu:50070/

安装OushuDB

安装OushuDB RPM,OushuDB RPM安装会自动创建gpadmin用户。

yum install -y hawq

在配置文件/etc/sysctl.conf添加内容

kernel.shmmax = 1000000000kernel.shmmni = 4096kernel.shmall = 4000000000kernel.sem = 250 512000 100 2048kernel.sysrq = 1kernel.core_uses_pid = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.msgmni = 2048net.ipv4.tcp_syncookies = 0net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_max_syn_backlog = 200000net.ipv4.conf.all.arp_filter = 1net.ipv4.ip_local_port_range = 10000 65535net.core.netdev_max_backlog = 200000fs.nr_open = 3000000kernel.threads-max = 798720kernel.pid_max = 798720# increase networknet.core.rmem_max=2097152net.core.wmem_max=2097152net.core.somaxconn=4096

使系统配置生效:

sysctl -p

创建OushuDB本地元数据目录和临时文件目录:

#创建OushuDB本地元数据目录,下面两个目录分别为master和segment使用mkdir -p /data1/hawq/masterddmkdir -p /data1/hawq/segmentdd#创建OushuDB临时文件目录,每块盘需要创建一个临时文件目录,这样可以让OushuDB使用到所有盘。mkdir -p /data1/hawq/tmpchmod -R 755 /data1/hawqchown -R gpadmin:gpadmin /data1/hawqmkdir -p /data2/hawq/tmpchmod -R 755 /data2/hawqchown -R gpadmin:gpadmin /data2/hawq

在HDFS上创建OushuDB数据目录:

sudo -u hdfs hdfs dfs -mkdir -p /hawq_defaultsudo -u hdfs hdfs dfs -chown -R gpadmin /hawq_default

编辑/usr/local/hawq/etc/slaves,去掉文件中的localhost,并加入oushu。slaves文件中存放所有slave节点的地址,每行一个节点。修改后文件为:

oushu

编辑/usr/local/hawq/etc/hawq-site.xml, 因为/usr/local/hawq/etc/hawq-site.xml中默认使用/data1和/data2两块盘,如果你有多块盘,你需要更改hawq_master_temp_directory和hawq_segment_temp_directory值,用到所有盘:

<property><name>hawq_master_address_host</name><value>oushu</value><description>The host name of hawq master.</description></property><property><name>hawq_dfs_url</name><value>oushu:9000/hawq_default</value><description>URL for accessing HDFS.</description></property><property><name>magma_nodes_url</name><value>localhost:6666</value><description>urls for accessing magma.</description></property><property><name>hawq_master_directory</name><value>/data1/hawq/masterdd</value><description>The directory of hawq master.</description></property><property><name>hawq_segment_directory</name><value>/data1/hawq/segmentdd</value><description>The directory of hawq segment.</description></property><property><name>hawq_master_temp_directory</name><value>/data1/hawq/tmp,/data2/hawq/tmp</value><description>The temporary directory reserved for hawq master. Note: please DONOT add " " between directries.</description></property><property><name>hawq_segment_temp_directory</name><value>/data1/hawq/tmp,/data2/hawq/tmp</value><description>The temporary directory reserved for hawq segment. Note: please DONOT add " " between directories.</description></property>

OushuDB4.0版本新增Magma的单独配置和启停功能,使用magam服务时,首先创建magma node数据目录:

# 创建mamga node数据目录mkdir -p /data1/hawq/magma_segmentddmkdir -p /data2/hawq/magma_segmentddchown -R gpadmin:gpadmin /data1/hawqchown -R gpadmin:gpadmin /data2/hawq

然后编辑配置/usr/local/hawq/etc/magma-site.xml:

<property><name>nodes_file</name><value>slaves</value><description>The magma nodes file name at GPHOME/etc</description></property><property><name>node_data_directory</name><value>file:///data1/hawq/magma_segmentdd,file:///data2/hawq/magma_segmentdd</value><description>The data directory for magma node</description></property><property><name>node_log_directory</name><value>~/hawq-data-directory/segmentdd/pg_log</value><description>The log directory for magma node</description></property><property><name>node_address_port</name><value>6666</value><description>The port magma node listening</description></property><property><name>magma_range_number</name><value>2</value></property><property><name>magma_replica_number</name><value>3</value></property><property><name>magma_datadir_capacity</name><value>3</value></property><property><name>compact_trigger_ap_ratio_limit</name><value>0.2</value><description>The threshold of triggering compact in MAGMAAP format.</description></property><property><name>compact_trigger_tp_ratio_limit</name><value>0.5</value><description>The threshold of triggering compact in MAGMAAP catalog</description></property>

以gpadmin用户登录:

su - gpadmin

设置免密码ssh:

source /usr/local/hawq/greenplum_path.shhawq ssh-exkeys -h oushu

初始化OushuDB,在询问是否初始化时,请输入y,表示确认初始化。

hawq init cluster  //OushuDB4.0 默认不启动magma服务

hawq init cluster --with_magma  //OushuDB4.0新增,3.X版本不支持该选项

// OushuDB4.0版本新增--with_magma选项,但只有hawq init|start|stop cluster命令可以带--with_magma选项。

OushuDB管理工具日志在/home/gpadmin/hawqAdminLogs/中,OushuDB master日志和segment日志分别在/data1/hawq/masterdd/pg_log/ 和/data1/hawq/segmentdd/pg_log/中。如果因为配置出错,可以查看错误日志,并依据改正。

检查OushuDB是否运行正常:

su - gpadminsource /usr/local/hawq/greenplum_path.shpsql -d postgresselect * from gp_segment_configuration;  //确定所有节点是up状态create table t(i int);insert into t select generate_series(1,1000);select count(*) from t;

体验新执行器

本章节通过TPCH lineitem 表来展示新执行器的使用。

建立e_lineitem外部表用来生成TPCH lineitem 数据,

CREATE EXTERNAL WEB TABLE E_LINEITEM ( L_ORDERKEY    INT8 ,L_PARTKEY    INTEGER ,L_SUPPKEY    INTEGER ,L_LINENUMBER  INTEGER ,L_QUANTITY    FLOAT ,L_EXTENDEDPRICE  FLOAT ,L_DISCOUNT    FLOAT ,L_TAX        FLOAT ,L_RETURNFLAG  VARCHAR(1) ,L_LINESTATUS  VARCHAR(1) ,L_SHIPDATE    TEXT ,L_COMMITDATE  TEXT ,L_RECEIPTDATE TEXT ,L_SHIPINSTRUCT CHAR(25) ,L_SHIPMODE    VARCHAR(10) ,L_COMMENT      VARCHAR(44) )EXECUTE 'bash -c "$GPHOME/bin/dbgen -b $GPHOME/bin/dists.dss -T L -s 1 -N 6 -n $((GP_SEGMENT_ID + 1))"'on 6 format 'text' (delimiter '|');

创建ORC 表

CREATE TABLE lineitem(  L_ORDERKEY    INT8,L_PARTKEY    INTEGER,L_SUPPKEY    INTEGER,L_LINENUMBER  INTEGER,L_QUANTITY    FLOAT,L_EXTENDEDPRICE  FLOAT,L_DISCOUNT    FLOAT,L_TAX        FLOAT,L_RETURNFLAG  TEXT,L_LINESTATUS  TEXT,L_SHIPDATE    TEXT,L_COMMITDATE  TEXT,L_RECEIPTDATE TEXT,L_SHIPINSTRUCT TEXT,L_SHIPMODE    TEXT,L_COMMENT      TEXT)WITH (APPENDONLY = true, OIDS = FALSE, ORIENTATION = orc);

插入数据

INSERT INTO lineitem SELECT * FROM e_lineitem;

从下面的例子可以看到新执行器对于性能的大幅改进。

-----获取表行数------postgres=# set new_executor = on;SETpostgres=# SELECT COUNT(*) FROM lineitem;count---------6001215(1 row)Time: 17.006 mspostgres=# set new_executor = off;SETpostgres=# SELECT COUNT(*) FROM lineitem;count---------6001215(1 row)Time: 213.248 ms-----TPCH 查询 1 ------postgres=# set new_executor = on;SETpostgres=#  SELECTl_returnflag,l_linestatus,sum(l_quantity)::bigint as sum_qty,sum(l_extendedprice)::bigint as sum_base_price,sum(l_extendedprice * (1 - l_discount))::bigint as sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax))::bigint as sum_charge,avg(l_quantity)::bigint as avg_qty,avg(l_extendedprice)::bigint as avg_price,avg(l_discount)::bigint as avg_disc,count(*) as count_orderFROMlineitemWHEREl_shipdate <= '1998-08-20'GROUP BYl_returnflag,l_linestatus;l_returnflag | l_linestatus | sum_qty  | sum_base_price | sum_disc_price |  sum_charge  | avg_qty | avg_price | avg_disc | count_order--------------+--------------+----------+----------------+----------------+--------------+---------+-----------+----------+-------------R            | F            | 37719753 |    56568041381 |    53741292685 |  55889619120 |      26 |    38251 |        0 |    1478870N            | F            |  991417 |    1487504710 |    1413082168 |  1469649223 |      26 |    38284 |        0 |      38854A            | F            | 37734107 |    56586554401 |    53758257135 |  55909065223 |      26 |    38273 |        0 |    1478493N            | O            | 73808911 |  110700990251 |  105167436999 | 109377979031 |      26 |    38248 |        0 |    2894278(4 rows)Time: 234.376 mspostgres=# set new_executor = off;SETpostgres=#  SELECTl_returnflag,l_linestatus,sum(l_quantity)::bigint as sum_qty,sum(l_extendedprice)::bigint as sum_base_price,sum(l_extendedprice * (1 - l_discount))::bigint as sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax))::bigint as sum_charge,avg(l_quantity)::bigint as avg_qty,avg(l_extendedprice)::bigint as avg_price,avg(l_discount)::bigint as avg_disc,count(*) as count_orderFROMlineitemWHEREl_shipdate <= '1998-08-20'GROUP BYl_returnflag,l_linestatus;l_returnflag | l_linestatus | sum_qty  | sum_base_price | sum_disc_price |  sum_charge  | avg_qty | avg_price | avg_disc | count_order--------------+--------------+----------+----------------+----------------+--------------+---------+-----------+----------+-------------R            | F            | 37719753 |    56568041381 |    53741292685 |  55889619120 |      26 |    38251 |        0 |    1478870N            | F            |  991417 |    1487504710 |    1413082168 |  1469649223 |      26 |    38284 |        0 |      38854A            | F            | 37734107 |    56586554401 |    53758257135 |  55909065223 |      26 |    38273 |        0 |    1478493N            | O            | 73808911 |  110700990251 |  105167436999 | 109377979031 |      26 |    38248 |        0 |    2894278(4 rows)Time: 2341.147 ms

阅读全文

与snappyjava相关的资料

热点内容
怎么解绑app的支付宝账号 浏览:909
ip地址服务器不可用怎么解决方法 浏览:181
为什么软件需要服务器 浏览:61
redis操作命令大全 浏览:597
python字符串重复索引 浏览:959
为什么香信新版本连接不上服务器 浏览:48
元旦程序员打羽毛球 浏览:612
otc焊接机器人离线编程教学 浏览:410
51单片机的ea引脚有何用途 浏览:205
centos查看用户命令 浏览:838
程序员脸胖 浏览:744
hdfs在主目录下创建文件夹 浏览:798
股票选股器源码公式如何弄 浏览:31
服务器如何使用在微信上 浏览:326
app登不了是怎么回事 浏览:252
dd命令u盘 浏览:568
单片机生日快乐程序 浏览:891
安卓手机连车载的叫什么 浏览:223
怎么让自己的手机键盘变得好看app 浏览:53
能看qq的文件夹 浏览:515