Fast(Fast)DFS存储-单机配置

http://blog.csdn.net/xnby/article/details/50782913

由网站选择nfs共享形式保存用户上传的图片,附件等材料,然后通过apache下载的计供应用户访问,在网站架构初期,使用这种简单的艺术实现了静态资源的读写分离,但随着网站数据量的长,图片服务器渐渐成整个网站的短板,缘次催生了运用fastfds的想法,故而先进行同样
番简单的测试!在初叶以前如故预先来探望fastfds的牵线消息:

一律句子话总计:spark是一个因内存的杀数据测算框架,

fastdfs是一个开源的,高性能的的分布式文件系统,他重点的效益包括:文件存储,同步跟走访,设计基于大可用和负载均衡,fastfd分外适用于遵照文件服务之站点,例如图片分享与录像分享网站
fastfds有半点个角色:跟踪服务和储存服务,跟踪服务控制,调度文件为载重均衡的方访;存储服务包括:文件存储,文件并,提供文件访问接口,同时以key
value的计管理文件的头数据
跟踪以及贮服务得由1台抑多华服务器组成,同时可以动态的长,删除跟踪以及储存服务使未会见针对在线的服务有潜移默化,在汇聚众多被,tracker服务是本着顶之
仓储系统由一个要两个卷成,卷和卷中的文书是相互独立的,所有卷的文本容量增长就是普存储系统中之公文容量。一个窝好由同尊抑多尊存储服务
器组成,一个卷下的贮存服务器受到的文本依然一致之,卷着之多台存储服务器起至了冗余备份和负载均衡的打算。在挽着长服务器时,同步已有些文件由系统活动
完成,同步到位后,系统活动将激增服务器切换到线上提供服务。当存储空间欠缺或将要耗尽时,可以动态添加卷。只待扩展一尊抑多雅服务器,并拿它配置为
一个初的卷曲,这样就增添了储存系统的容量。
下几乎摆设图可以知道的求证fastfds的架构和文书及污染与下载流程等:

上层包括了:Spark(Spark) SQL类似HiveQL, Spark(Spark) Streaming
实时数据流总结,MLlib 机器上算法管教,GraphX
图算法包

下用介绍下fastdfs在rhel上之配置过程
192.168.0.205  storage tracker

根 斯帕克Core
实现了基本功效:任务调度,内存管理,错误苏醒,存储交互等,Spark(Spark)Core还噙了针对性RDD(弹性分布式数据集)的API定义

1, 安装依赖包,添加fastDFS运行用户
yum install -y zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl
openssl-devel libevent libevent-devel perl unzip
useradd -s /sbin/nologin fastdfs

RDD是Spark对计量任务封装,现在勿知底也平素不提到,前边会趁机实例更精通RDD

2,创造数量存储目录
mkdir -p /data/fastdfs/{storage,tracker,client}
[root@localhost src]# ll /data/fastdfs
total 0
drwxr-xr-x 2 root root 6 Dec 10 15:18 storage   #Storage目录保存运行日志及其data数据 
drwxr-xr-x 2 root root 6 Dec 10 15:17 tracker   #tracker目录保存运行日志
drwxr-xr-x 2 root root 6 Dec 10 15:17 client

 

3,安装libfastcommon
下载最新版本: libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
unzip master.zip
cd libfastcommon-master/
./make.sh
./make.sh install

一、Spark安装:

4, 安装Fastdfs
wget http://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.05/FastDFS\_v5.05.tar.gz/download
tar zxf FastDFS_v5.05.tar.gz && cd FastDFS
./make.sh
./make.sh install
\cp conf/*.conf /etc/fdfs/

单机版本spark安装分外简单,从官网下载一个源码包,解压即可。http://spark.apache.org/downloads.html

tar zxf fastdfs-nginx-module_v1.16.tar.gz
cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

解压,把bin目录在环境变量,pyspark即可启动python shell

cd /etc/fdfs/
rm -rf *.sample
chown -R fastdfs: /data/fastdfs (不用改权限貌似也可以)

 

5, 配置tracker 和 storage 配置文件, 对许改
vi storage.conf
group_name=group1
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.0.205:22122
http.server_port=80

单机形式启动pyspark后

vi tracker.conf
base_path=/data/fastdfs/tracker

一个简单易行的demo:

vi mod_fastdfs.conf
group_name=group1
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.0.205:22122
url_have_group_name = true   #是true 不是ture

 

vi client.conf
tracker_server=192.168.0.205:22122
base_path=/data/fastdfs/client

>>>lines = sc.textFile(“1.txt”)
//创造一个RDD,“1.txt也当地存在的公文

6,安装nginx和fastdfs-nginx-module模块
wget http://nginx.org/download/nginx-1.8.0.tar.gz
http://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module\_v1.16.tar.gz/download

>>> lines                                    
                             

tar zxf nginx-1.8.0.tar.gz 

MapPartitionsRDD[4] at textFile at
NativeMethodAccessorImpl.java:-2

ulimit -SHn 102400
useradd -s /sbin/nologin nginx

>>> lines.count()

#修改模块中对应之门道,要不然模块不可知对安装加载
cd fastdfs-nginx-module/src
vi config   #更改如下, 去丢local,并指定lib64(64系统)
CORE_INCS=”$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/”
CORE_LIBS=”$CORE_LIBS -L/usr/lib64 -lfastcommon -lfdfsclient”
cd /tools/nginx-1.8.0
./configure
–prefix=/usr/local/nginx \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \
–error-log-path=/var/log/nginx/error.log \
http-log-path=/var/log/nginx/access.log
\
–pid-path=/var/run/nginx/nginx.pid \
–lock-path=/var/lock/nginx.lock \
–user=nginx \
–group=nginx \
–with-http_ssl_module
\
–with-http_flv_module
\
–with-http_stub_status_module
\
–with-http_gzip_static_module
\
–with-pcre \
–with-http_realip_module \
http-client-body-temp-path=/var/tmp/nginx/client/
\
http-proxy-temp-path=/var/tmp/nginx/proxy/
\
http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
\
http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
\
http-scgi-temp-path=/var/tmp/nginx/scgi
\
–add-module=/tools/fastdfs-nginx-module/src/ \

7

make
make install

由此lines对象,可以调用基本的函数,总结单词数等

7, 配置nginx
server {
       listen 80;
       server_name 192.168.0.205;

 

   location /group1/M00 {
            root /data/fastdfs/storage/data/;
            ngx_fastdfs_module;
          }
       }

事例中sc是啊呢?斯帕克(Spark)Context。

8,启动nginx和fastdfs
[root@test-1 vhost]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server: 
[root@test-1 vhost]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server: 
[root@test-1 vhost]# 
[root@test-1 vhost]# /etc/init.d/nginx -t
ngx_http_fastdfs_set pid=8985
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@test-1 vhost]# /etc/init.d/nginx -s reload
ngx_http_fastdfs_set pid=8986

各国一个spark应用都来一个驱动器程序()来倡导集群达之各类并行操作,pyspark即驱动器程序,

root@test-1 vhost]# netstat -npl |grep -E “nginx|fdfs”
tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      8972/fdfs_trackerd  
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7561/nginx          
tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      8679/fdfs_storaged

驱动器程序通过一个斯帕克(Spark)Context对象来拜会斯帕克(Spark)(Spark),sc代表针对计量集群的一个连。

否可以下命令来监督服务器的状态

驱动器程序一般只要管理大多独执行器节点,将计任务分发给不同的节点总计。

[root@tracker ~]# fdfs_monitor /etc/fdfs/client.conf

 

9,测试
[root@test-1 ~]# fdfs_test /etc/fdfs/client.conf upload test.html
This is FastDFS client test program v5.05

脚继续完成好数额下的Helloword:word count
程序:

Copyright (C) 2008, Happy Fish / YuQing

 

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

>>> words = lines.flatMap(lambda line:
line.split(‘ ‘))

[2015-06-14 02:46:06] DEBUG – base_path=/tmp, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, 
anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, 
use_storage_id=0, storage server id count: 0

>>> words

tracker_query_storage_store_list_without_group: 
        server 1. group_name=, ip_addr=192.168.0.205, port=23000
        server 2. group_name=, ip_addr=192.168.0.206, port=23000

PythonRDD[8] at RDD at PythonRDD.scala:43

group_name=group1, ip_addr=192.168.0.206, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466.html
source ip address: 192.168.0.206
file timestamp=2015-06-14 02:46:06
file size=15
file crc32=458900718
example file url: http://192.168.0.206/group1/M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466.html
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466_big.html
source ip address: 192.168.0.206
file timestamp=2015-06-14 02:46:06
file size=15
file crc32=458900718
example file url: http://192.168.0.206/group1/M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466\_big.html

>>> wc = words.map(lambda x:(x,1))

Nginx配置缩略图跟法斯特(Fast)dfs模块组成
nginx扩张图裁剪模块
–with-http_image_filter_module

>>> wc

vim /etc/nginx/conf.d/fastdfd.conf
location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|gif|png) {
root /home/fastdata/data;
ngx_fastdfs_module;
set $w $2;
set $h $3;

PythonRDD[9] at RDD at PythonRDD.scala:43

if ($w != “0”) {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4
break;
}
image_filter resize $w $h;
image_filter_buffer 2M;
}

>>> from operator import add

location ~ group1/M00/(.+)\.?(.+){
root /home/fastdata/data;
ngx_fastdfs_module;
}

>>> counts = wc.reduceByKey(add)

原图访问
http://img3.jiupaicn.com/group1/M00/00/00/rBASWFeEibOAGRHwAADl6SrNlvQ206.jpg
 缩略图看
http://img3.jiupaicn.com/group1/M00/00/00/rBASWFeEibOAGRHwAADl6SrNlvQ206_500x150.jpg

>>> counts

 

PythonRDD[14] at RDD at PythonRDD.scala:43

 

>>> counts.saveAsTextFile(“wc”)

以身作则中美观看 lines,words,wc,counts都是RDD对象实例

列一样步操作以斯帕克(Spark)(Spark)都是RDD的一个虚无

 

独运用,不经过shell怎么写独立的剧本呢,

一向编写校本文件,然后经过spark-submit提交即可

eg:worldcount程序的py脚本如下:

########first.py############

from pyspark import SparkConf, SparkContext
from operator import add

conf = SparkConf().setMaster(“local”).setAppName(“My App”)
sc = SparkContext(conf=conf)

lines = sc.textFile(“/Users/xiabin/1.txt”)

words = lines.flatMap(lambda line: line.split(‘ ‘))
wc = words.map(lambda x:(x,1))
counts = wc.reduceByKey(add)

counts.saveAsTextFile(“wcres”)

########first.py############

测试遭还发现,spark-submit可以智能的辨识应用之一些py模块,比如import一个myconf.py文件

或者一个包都能够不要添加另外代码运行(只单机实验)。

率先赖接触下来相比较写hadoop的mapreduce代码,spark的包装调用相对来说简单了广大。

外加信:

http://www.tuicool.com/articles/iAbInuj 

http://blog.csdn.net/kwu\_ganymede/article/details/51832427

发表评论

电子邮件地址不会被公开。 必填项已用*标注