搜档网
当前位置:搜档网 › 通过thrift使用c++访问HBase

通过thrift使用c++访问HBase

通过thrift使用c++访问HBase
通过thrift使用c++访问HBase

通过Thrift使用C++访问HBase完整文档一Linux系统下Thrift安装

1.1 安装libevent

./configure --prefix=/usr/local/libevent

make

make install

1.2 安装boost

./bootstrap.sh

./bjam "-sTOOLS=gcc" "--without-python" install

1.3 安装Thrift

chmod +x configure

./configure --with-python=no

make

make install

二生成Hbase的client代码

执行命令:

thrift --gen cpp Hbase.thrift

生成gen-cpp文件夹。

三准备hbase

步骤:

1 首先确认hbase正常工作:

查看thriftserver端口状态,如:

hbase.regionserver.thrift.port=9090

lsof –i:9090

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

java 5846 root 167u IPv6 5505603 TCP *:websm (LISTEN)

如果thriftserver服务未启动,则bin/hbase-daemon.sh start thrift启动。

2 编写测试程序,并编译。

如测例的Makefile文件如下:

THRIFT_DIR = /usr/local/include/thrift

LIB_DIR = /usr/local/lib

GEN_SRC = ./gen-cpp/Hbase.cpp \

./gen-cpp/Hbase_types.cpp \

./gen-cpp/Hbase_constants.cpp

default: DemoClient

DemoClient: DemoClient.cpp

g++ -DHA VE_NETINET_IN_H -o DemoClient -I${THRIFT_DIR} -I/usr/include -I./gen-cpp -L${LIB_DIR} -lthrift DemoClient.cpp ${GEN_SRC}

clean:

rm -rf DemoClient

3 如果遇到无法找到libthrift.so.0库的问题,则需要执行

export LD_LIBRARY_PA TH=/usr/local/lib:$LD_LIBRARY_PATH

4 执行程序

./DemoClient localhost 9090

注意:

9090是ThriftServer的默认监听端口。

四Windows系统下Thrift安装

4.1 编译boost库

1、在网站下载boost_1_36_0文件包。https://www.sodocs.net/doc/d510477516.html,/。

2、由于boost是采用其自己的bjam工具通过命令行进行编译的,所以:如果在Windows下开启console窗口(单击“开始”按钮,单击“运行”,敲入“cmd”),必须将Visual Studio中C++目录下的环境vcvarsall.bat配置脚本运行一遍,以设置好VC的编译器环境变量。如果从vs2005的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2005”,指向“Visual Studio 工具”,然后单击“Visual Studio 2005 命令提示”),则不需要运行Visual Studio中C++目录下的环境vcvarsall.bat配置脚本。

3、解压缩到d:\boost_1_36_0\目录下。

4、编译bjam。

从vs2005的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2005”,指向“Visual Studio 工具”,然后单击“Visual Studio 2005 命令提示”),cd到d:\boost_1_36_0\tools\jam\src下执行build.bat,会在d:\boost_1_36_0\tools\jam\src\bin.ntx86\下生成bjam.exe,將bjam.exe复制到d:\boost_1_36_0\下。

5、设定编译环境。

修改user-config.jam (d:\boost_1_36_0\tools\build\v2\user-config.jam) 的MSVC configuration

# MSVC configuration

# Configure msvc (default version, searched in standard location

# and PATH).

# using msvc ;

using msvc : 8.0 : : /wd4819 /D_CRT_SECURE_NO_DEPRECATE

/D_SCL_SECURE_NO_DEPRECATE

/D_SECURE_SCL=0 ;

6、编译boost

將目录cd到d:\boost_1_36_0\下执行

(1) 编译不带ICU支持的boost库

此种情况下的boost库编译起来比较的简单,在准备好的console窗口中输入:bjam --without-python --toolset=msvc-8.0 --build-type=complete --prefix="d:\boost_1_36_0" stage

就可以了,如果要安装的话则输入:

bjam --without-python --toolset=msvc-8.0 --build-type=complete

--prefix="d:\boost_1_36_0" install

(2) 编译具有ICU支持的boost库

首先我们必须编译ICU库才能够编译boost库,在准备好的console窗口中输入:bjam -sICU_PATH=d:\ICU --without-python --toolset=msvc-8.0 --build-type=complete --prefix="d:\boost_1_36_0" stage

就可以了,如果要安装的话则输入:

bjam -sICU_PATH=d:\ICU --without-python --toolset=msvc-8.0 --build-type=complete --prefix="d:\boost_1_36_0" install

通过上面的方法可以很正常完成boost各种需要版本的关系。

参数说明:

--without-python 表示不使用python

--toolset : 所使用compiler,Visual Studio 2005 为msvc-8.0

--build-type:编译类型,complete表示生成所有的版本(debug,release等)--prefix:指定编译后library的的目录

这一步要花比较长的时间(大约几十分钟,视机器配置而定)

7、设定vs2005环境。

Tools -> Options -> Projects and Solutions -> VC++ Directories

在Library files加上d:\ boost_1_36_0\lib

在Include files加上d:\boost_1_36_0\include\boost-1_36\

注意:以上的各个目录只是作为例子说明,下载下来的文件包很小,但是编译后整个文件包就非常大(超过4G)。在编译时要留足空间。

测试如下

// BoostTest.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

using boost::lexical_cast;

int a=lexical_cast("123");

cout<<"number: "<

return 1;

}

测例能够正常运行,说明安装成功。

4.2 编译thrift库

需要安装好VS2010的编译器。

下载好Thrift-0.8.0版源码并解压到相关目录。

4.2.1首先需要编译libthrift.lib库文件

步骤如下:

1 使用vs2010打开…\thrift-0.8.0\lib\cpp目录下libthrift.vcxproj项目。

2 给项目添加boost 附加包含目录和附加库目录。

如:

附加库目录:…\boost_1_36_0\lib

附加包含目录:…\boost_1_36_0\include\boost-1_36

3 生成解决方案,会产生libthrift.lib库文件。

注意:

如果编译时报int32_t未知类型之类的错误:

则修改项目C/C++的预处理器定义属性,添加

HA VE_CONFIG_H

BOOST_HAS_STDINT_H

4.2.2然后编译thrift库文件(本步骤只生成静态lib库文件) 4.2.2.1下载Thrift-0.8.0.exe生成Hbase的thrift客户端API Thrift-0.8.0.exe –gen cpp Hbase.thrift

生成gen-cpp目录,如下:

Hbase_server.skeleton.cpp文件之后未用到。

4.2.2.2 使用vs2010新建win32控制台应用程序

点击下一步,选择DLL(D),点击完成。

把第一步中生成的.h和.cpp文件拷贝到本工程的源文件夹里。

注意:需要添加#include "stdafx.h"到拷贝的文件。

4.2.2.3 添加附加包含目录和附加库目录

如:

附加库目录:…\boost_1_36_0\lib

附加包含目录:…\boost_1_36_0\include\boost-1_36和…\thrift-0.8.0\lib\cpp\src

4.2.2.4 生成解决方案,会产生thriftdll.lib库文件(名字视所建工程名而定)

注意:

如果编译时报int32_t未知类型之类的错误:

则修改项目C/C++的预处理器定义属性,添加

HA VE_CONFIG_H

BOOST_HAS_STDINT_H

4.3 编译hbaseclient测试

此时,已生成libthrift.lib和thriftdll.lib库文件。

如果要使用vs2010开发客户端应用程序,需要修改应用项目的配置属性。

如:

附加包含目录:…\boost_1_36_0\include\boost-1_36和…\thrift-0.8.0\lib\cpp\src 和…\gen-cpp

附加库目录:…\boost_1_36_0\lib 和…\boost_1_36_0\boost\bin\vc9\lib

链接器->输入->附加依赖项增加:

libboost_thread-vc90-mt-gd-1_36.lib

libthrift.lib

thriftdll.lib

设置完成后,可以执行测例查看是否成功。测例可使用第五部分例子。

五例子

c++例子

DemoClient.cpp文件

(注意:该测例可以在Linux系统上运行,在windows系统上,如果报:

错误,则需要在文件头增加宏定义:#define_WIN32_WINNT 0x0500) #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "Hbase.h"

using namespace apache::thrift;

using namespace apache::thrift::protocol;

using namespace apache::thrift::transport;

using namespace apache::hadoop::hbase::thrift;

namespace {

typedef std::vector StrVec;

typedef std::map StrMap;

typedef std::vector ColVec;

typedef std::map ColMap; typedef std::vector CellVec;

typedef std::map CellMap;

static void

printRow(const std::vector &rowResult)

{

for (size_t i = 0; i < rowResult.size(); i++) {

std::cout << "row: " << rowResult[i].row << ", cols: ";

for (CellMap::const_iterator it = rowResult[i].columns.begin();

it != rowResult[i].columns.end(); ++it) {

std::cout << it->first << " => " << it->second.value << "; ";

}

std::cout << std::endl;

}

}

static void

printVersions(const std::string &row, const CellVec &versions)

{

std::cout << "row: " << row << ", values: ";

for (CellVec::const_iterator it = versions.begin(); it != versions.end(); ++it) {

std::cout << (*it).value << "; ";

}

std::cout << std::endl;

}

}

int

main(int argc, char** argv)

{

if (argc < 3) {

std::cerr << "Invalid arguments!\n" << "Usage: DemoClient host port" << std::endl;

return -1;

}

boost::shared_ptr socket(new TSocket(argv[1], boost::lexical_cast(argv[2])));

boost::shared_ptr transport(new TBufferedTransport(socket));

boost::shared_ptr protocol(new TBinaryProtocol(transport));

HbaseClient client(protocol);

try {

transport->open();

std::string t("demo_table");

//

// Scan all tables, look for the demo table and delete it.

//

std::cout << "scanning tables..." << std::endl;

StrVec tables;

client.getTableNames(tables);

for (StrVec::const_iterator it = tables.begin(); it != tables.end(); ++it) { std::cout << " found: " << *it << std::endl;

if (t == *it) {

if (client.isTableEnabled(*it)) {

std::cout << " disabling table: " << *it << std::endl;

client.disableTable(*it);

}

std::cout << " deleting table: " << *it << std::endl;

client.deleteTable(*it);

}

}

//

// Create the demo table with two column families, entry: and unused: //

ColVec columns;

columns.push_back(ColumnDescriptor());

columns.back().name = "entry:";

columns.back().maxVersions = 10;

columns.push_back(ColumnDescriptor());

columns.back().name = "unused:";

std::cout << "creating table: " << t << std::endl;

try {

client.createTable(t, columns);

} catch (const AlreadyExists &ae) {

std::cerr << "W ARN: " << ae.message << std::endl;

}

ColMap columnMap;

client.getColumnDescriptors(columnMap, t);

std::cout << "column families in " << t << ": " << std::endl;

for (ColMap::const_iterator it = columnMap.begin(); it != columnMap.end(); ++it) {

std::cout << " column: " << it->https://www.sodocs.net/doc/d510477516.html, << ", maxVer: " << it->second.maxVersions << std::endl;

}

//

// Test UTF-8 handling

//

std::string invalid("foo-\xfc\xa1\xa1\xa1\xa1\xa1");

std::string valid("foo-\xE7\x94\x9F\xE3\x83\x93\xE3\x83\xBC\xE3\x83\xAB");

// non-utf8 is fine for data

const std::map attributes;

std::vector mutations;

mutations.push_back(Mutation());

mutations.back().column = "entry:foo";

mutations.back().value = invalid;

client.mutateRow(t, "foo", mutations, attributes);

// try empty strings

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:";

mutations.back().value = "";

client.mutateRow(t, "", mutations, attributes);

// this row name is valid utf8

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:foo";

mutations.back().value = valid;

client.mutateRow(t, valid, mutations, attributes);

// non-utf8 is now allowed in row names because HBase stores values as binary mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:foo";

mutations.back().value = invalid;

client.mutateRow(t, invalid, mutations, attributes);

// Run a scanner on the rows we just created

StrVec columnNames;

columnNames.push_back("entry:");

std::cout << "Starting scanner..." << std::endl;

int scanner = client.scannerOpen(t, "", columnNames, attributes);

try {

while (true) {

std::vector value;

client.scannerGet(value, scanner);

if (value.size() == 0)

break;

printRow(value);

}

} catch (const IOError &ioe) {

std::cerr << "FATAL: Scanner raised IOError" << std::endl; }

client.scannerClose(scanner);

std::cout << "Scanner finished" << std::endl;

//

// Run some operations on a bunch of rows.

//

for (int i = 100; i >= 0; --i) {

// format row keys as "00000" to "00100"

char buf[32];

sprintf(buf, "%05d", i);

std::string row(buf);

std::vector rowResult;

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "unused:";

mutations.back().value = "DELETE_ME";

client.mutateRow(t, row, mutations, attributes);

client.getRow(rowResult, t, row, attributes);

printRow(rowResult);

client.deleteAllRow(t, row, attributes);

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:num";

mutations.back().value = "0";

mutations.push_back(Mutation());

mutations.back().column = "entry:foo";

mutations.back().value = "FOO";

client.mutateRow(t, row, mutations, attributes);

client.getRow(rowResult, t, row, attributes);

printRow(rowResult);

// sleep to force later timestamp

poll(0, 0, 50);

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:foo";

mutations.back().isDelete = true;

mutations.push_back(Mutation());

mutations.back().column = "entry:num";

mutations.back().value = "-1";

client.mutateRow(t, row, mutations, attributes);

client.getRow(rowResult, t, row, attributes);

printRow(rowResult);

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:num";

mutations.back().value = boost::lexical_cast(i); mutations.push_back(Mutation());

mutations.back().column = "entry:sqr";

mutations.back().value = boost::lexical_cast(i*i); client.mutateRow(t, row, mutations, attributes);

client.getRow(rowResult, t, row, attributes);

printRow(rowResult);

mutations.clear();

mutations.push_back(Mutation());

mutations.back().column = "entry:num";

mutations.back().value = "-999";

mutations.push_back(Mutation());

mutations.back().column = "entry:sqr";

mutations.back().isDelete = true;

client.mutateRowTs(t, row, mutations, 1, attributes); // shouldn't override latest client.getRow(rowResult, t, row, attributes);

printRow(rowResult);

CellVec versions;

client.getVer(versions, t, row, "entry:num", 10, attributes);

printVersions(row, versions);

assert(versions.size());

std::cout << std::endl;

try {

std::vector value;

client.get(value, t, row, "entry:foo", attributes);

if (value.size()) {

std::cerr << "FATAL: shouldn't get here!" << std::endl;

return -1;

}

} catch (const IOError &ioe) {

// blank

}

}

// scan all rows/columns

columnNames.clear();

client.getColumnDescriptors(columnMap, t);

std::cout << "The number of columns: " << columnMap.size() << std::endl;

for (ColMap::const_iterator it = columnMap.begin(); it != columnMap.end(); ++it) { std::cout << " column with name: " + it->https://www.sodocs.net/doc/d510477516.html, << std::endl; columnNames.push_back(it->https://www.sodocs.net/doc/d510477516.html,);

}

std::cout << std::endl;

std::cout << "Starting scanner..." << std::endl;

scanner = client.scannerOpenWithStop(t, "00020", "00040", columnNames, attributes); try {

while (true) {

std::vector value;

client.scannerGet(value, scanner);

if (value.size() == 0)

break;

printRow(value);

}

} catch (const IOError &ioe) {

std::cerr << "FATAL: Scanner raised IOError" << std::endl;

}

client.scannerClose(scanner);

std::cout << "Scanner finished" << std::endl;

transport->close();

} catch (const TException &tx) {

std::cerr << "ERROR: " << tx.what() << std::endl; }

}

钳型电流表的使用方法及注意事项

https://www.sodocs.net/doc/d510477516.html, 钳型电流表的使用方法及注意事项 一、使用说明 平常一些我们了利用普通电流表测量电流时,需要将电路切断停机后才能将电流表接入进行测量,这是很麻烦的,有时正常运行的电动机是不允许这样做的。此时,使用钳形电流表就显得方便多了,可以在不切断电路的情况下来测量电流。 钳形电流表工作原理: 钳形电流表是由电流互感器和电流表组合而成。电流互感器的铁心在捏紧扳手时可以张开;被测电流所通过的导线可以不必切断就可穿过铁心张开的缺口,当放开扳手后铁心闭合。穿过铁心的被测电路导线就成为电流互感器的一次线圈,其中通过电流便在二次线圈中感应出电流。从而使二次线圈相连接的电流表便有指示-----测出被测线路的电流。钳形

https://www.sodocs.net/doc/d510477516.html, 表可以通过转换开关的拨档,改换不同的量程。但拨档时不允许带电进行操作。钳形表一般准确度不高,通常为2.5——5级。为了使用方便,表内还有不同量程的转换开关供测不同等级电流以及测量电压的功能。 二、使用方法 1、在使用钳形电流表前应仔细阅读说明书,弄清是交流还是交直流两用钳形表。 2、钳形表每次只能测量一相导线的电流,被测导线应置于钳形窗口中央,不可以将多相导线都夹入窗口测量。 3、被测电路电压不能超过钳形表上所标明的数值,否则容易造成接地事故,或者引起触电危险。 4、使用高压钳形表时应注意钳形电流表的电压等级,严禁用低压钳形表测量高电压回路的电流。用高压钳形表测量时,应由两人操作,非值班人员测量还应填写第二种工作票,测量时应戴绝缘手套,站在绝缘垫上,不得触及其它设备,以防止短路或接地。 5、在高压回路上测量时,禁止用导线从钳形电流表另接表计测量。测量高压电缆各相电流时,电缆头线间距离应在300mm以上,且绝缘良好,待认为测量方便时,方能进行。 6、观测表计时,要特别注意保持头部与带电部分的安全距离,人体任何部分与带电体的距离不得小于钳形表的整个长度。 三、注意事项 (1)被测线路的电压要低于钳表的额定电压。 (2)当电缆有一相接地时,严禁测量。防止出现因电缆头的绝缘水平低发生对地击穿爆炸而危及人身安全。

铰孔质量的判别及其解决措施

铰孔质量的判别及其解决措施 铰孔是半精加工基础上进行的一种精加工。一般铰孔的尺寸公差等级可达IT8~IT7,表面粗糙度R。值可达1.6~0.4。在实际加工中,常见的铰孔质量问题有表面粗糙度和尺寸精度差,孔口呈喇叭状等。现分析其产生原因和改进方法。 1 表面粗糙度差的原因及其对策 铰削速度过大 铰削用量各要素对铰孔的表面粗糙度均有影响,其中以铰削速度影响最大,如用高速钢铰刀铰孔,要获得较好的粗糙度Ra0.63μ;m,对中碳钢工件来说,铰削速度不应超过5m/min,因为此时不易产生积屑瘤,且速度也不高;而铰削铸铁时,因切屑断为粒状,不会形成积屑瘤,故速度可以提高到8~10m/min。如果采用硬质合金铰刀,铰削速度可提高到90~130m/min,但应修整铰刀的某些角度,以避免出现打刀现象。铰削余量不适当,进给量过大 一般铰削余量为0.1~0.25mm,对于较大直径的孔,余量不能大于0.3mm,否则表面粗糙度很差。故余量过大时可采取粗铰和精铰分开,以保证技术要求。余量过小,不能正常切削也会使表面粗糙度差。 铰孔的粗糙度Ra值随进给量的增加而增大,但进给量过小时,会导致径向摩擦力的增大,引起铰刀颤动,使孔的表面变粗糙。所以,如用标准高速钢铰刀加工钢件,要得到表面粗糙度Ra0.63μ;m,则进给量不能超过0.5mm/r,对于铸铁件,可增加至0.85mm/r。铰刀刀刃不锋利,刃带粗糙 一般标准铰刀均未经研磨,影响铰孔的表面粗糙度,因此必须对新铰刀进行研磨。研磨时要注意铰刀的切削部分与校准部分的交界处,因为内孔最后在这里成形,刀具的粗糙度也在该处被反映到铰孔的内壁。所以研磨铰刀时,应特别注意用油石将该处轻轻地仔细研磨、抛光,使切削部分与校准部分的交接处圆滑过渡。经研磨的铰刀,切削刃后刀面刃带粗糙度得到改善,切削部分与校准部分交界处的粗糙度也得到改善,实际上是改善了铰刀本身的粗糙度,故有利于改善铰孔的表面粗糙度。铰孔时未使用润滑液或使用不当的润滑液 铰孔时未用润滑液,则铰刀工作部分的后刀面与孔壁会发生干摩擦,使孔的表面粗糙度差。同样,使用不适当的润滑液,不但不能改善摩擦情况,反而会使摩擦加剧,影响表面粗糙度。用高速钢铰刀铰削碳素钢时,可用10%~15%的乳化液或硫化油,都能得到较好的表面粗糙度。铰削铸铁时,一般不用润滑液。铰刀反转退出时会使表面粗糙度变差 铰刀反转退出时,因切削挤压铰刀,而划伤孔壁,故铰完后,应把铰刀从孔内沿进给方向拉出孔外,对柄部直径大于工件部分的铰刀,应保持与切削时相同转向退出。2 喇叭状孔的起因及解决措施 铰孔为喇叭状主要原因是:铰刀的切削部分与底孔不同心,进给方向和工件旋转中心不一致等。 解决措施如下: 改善铰刀的导向性能 可采用精密导向套,使铰刀沿规定的孔道铰削,如条件不允许用导向套,则可采用浮动夹头装夹铰刀,这样也可减小孔的喇叭形。缩短铰刀标准长度来改善喇叭形 其方法有2种:①铰刀的标准长度取4~12mm,其余部分直径磨小0.2~0.7mm;②取铰刀的标准部分为4~12mm,其余部分磨出较大的反锥,这2种方法均能缩短标准长度,有利于铰刀更好工作,后一种方法导向性略有降低,在实际工作中常用第1种方法。3 防止孔径扩大 开始铰孔、孔径就较大

educoder平台hbase的安装与环境搭建

第一关Hbase数据库的安装 mkdir /app 回车 cd /opt 回车 ulimit -f 1000000 回车 tar -zxvf hbase-2.1.1-bin.tar.gz -C /app 回车 echo $JAVA_HOME 回车;(复制这个命令所显示出的路径,要用) 结果是:/usr/lib/jvm/jdk1.8.0_111 vim /app/hbase-2.1.1/conf/hbase-env.sh 回车,翻到第二十八行,找到# export JAVA_HOME=/usr/java/jdk1.8.0/把前面的# 删了、把/usr/java/jdk1.8.0/换成export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111 esc,wq cd (回到根目录) 回车 vim /app/hbase-2.1.1/conf//hbase-site.xml 回车 到最后一行把代码复制到标签上 hbase.rootdir file:///root/data/hbase/data hbase.zookeeper.property.dataDir /root/data/hbase/zookeeper hbase.unsafe.stream.capability.enforce false 然后wq vim /etc/profile 在末尾添加以下 # SET HBASE_enviroment HBASE_HOME=/app/hbase-2.1.1 export PATH=$PATH:$HBASE_HOME/bin 然后wq source /etc/profile(使配置生效) 回车

钳形表与三相四线表使用方法及注意事项

一、功率与电能测量方法: 1.1 功率测量方法 (1). 直接法:测量功率可直接用电动系功率表、数字功率表或三相功率表,测量三相功率还可以用单相功率表接成两表法或三表法,虽然有求和过程,但一般仍将它归为直接法. (2). 间接法:直流可通过测量电压、电流间接求得功率。交流则需要通过电压、电流和功率因数求得功率。 1.2 电能测量方法 (1). 直接法:直接测量电能,直流可使用电动系电能表,交流用感应系或电子电能表。 (2). 间接法:电能测量一般不用间接法,只有在功率稳定不变的情况下用功率表和记时时钟进行测量。 二.钳形电流表的应用 钳形电流表按结构原理不同分为磁电式和电磁式两种,磁电式可测量交流电流和交流电压;电磁式可测量交流电流和直流电流。钳形表俯视图如图1.1所示: 图1.1 钳形表俯视图

钳形表机械图如图1.2所示: 图1.2 钳形表机械视图 2.1.钳形电流表的使用方法和使用时应注意的事项 (1). 在进行测量时用手捏紧扳手即张开,被测载流导线的位置应放在钳口中间,防止产生测量误差,然后放开扳手,使铁心闭合,表头就有指示。 (2). 测量时应先估计被测电流或电压的大小,选择合适的量程或先选用较大的量程测量,然后再视被测电流、电压大小减小量程,使读数超过刻度的1/2,以便得到较准确的读数。 (3). 为使读数准确,钳口两个面应保证很好的接合,如有杂声,可将钳口重新开合一次,如果声音依然存在,可检查在接合面上是否有污垢存在,如有污垢,可用汽油擦干净。 (4). 测量低压可熔保险器或低压母线电流时,测量前应将邻近各相用绝缘板隔离,以防钳口张开时可能引起相间短路。 (5). 有些型号的钳形电流表附有交流电压刻度,测量电流、电压时应分别进行,不能同时测量。 (6). 不能用于高压带电测量。 (7). 测量完毕后一定要把调节开关放在最大电流量程位置,以免下次使用时由于未经选择量程而造成仪表损坏。

气门座铰刀使用遇到的问题

气门座铰刀使用遇到的问题 1.操作技巧 检查定心是否正确,是铰好气门座圈的重要保证,检查的方法是安装好后用手轻轻转动摇柄接头,看导杆在气门导管内旋转是否灵活自由,灵活自由则定心正确,否则要按照安装调整中讲的重新装一次。加工不同材质的座圈,相应的要从进刀量和旋转速度两方面来调整适应,比如材质软,进刀量可心稍微增大,旋转速度可快些,如果材质很硬,进刀量一定要小,旋转速度要慢。2.偏口问题: 在铰气门座圈时,有的总是先铰一边这是正常和正确的,是由于气门座圈与导管孔不同心,上口或下口不是正圆等原因造成的。从本工具设计来考虑,导杆与导管孔间隙不大,导导杆没有弯曲,如定心正确,就一定会加工出与导管同心的密封带,所以用户可以放心的加工,加工后如果真的出现偏口,可另换一新门,排除气门的因素,再检查:1、导杆是否弯曲;2、初装定位座圈操作是否正确;3、与导管的间隙是否过大;4、所有固定螺栓是否扭紧,以上问题都解决了,一定会解决偏口的问题。3.刀片架碰室壁: 极个别的特殊缸盖燃烧室壁紧紧挨着座圈,而且燃烧室壁较高,这时会出现刀片架碰到燃烧室壁,刀接触不到座圈的现象,这时可用砂轮机磨掉刀片架上碰燃烧室壁的部分。4. 导杆的粗细与导管孔的配合问题: 本工具所配的导杆粗细是与标准导管孔相配合的。经常遇到的问题是:缸盖更换新导管后,导杆插不进导管孔,其原因是新导管内径在压装过程中变形缩小,解决的方法是用合适的内圆铰刀,铰除变形部分,变形部分是造成成气门与导管之间不规则磨损的主要原因,所以铰除变形部分非常重要,铰削后的导管就可以和本工具导杆理想配合了。市场上有棍铰刀,各种型号的都可以买到。5.进刀装置: 进刀圆盘螺母与定位装置上的空心螺栓长期使用,磨损晃动后,可将固定螺母的螺栓向上扭,螺母在外斜套内向上移动,将螺母孔缩小了,即可继续使用。6.铰好的座圈口质量: 这是用户最关心的,也是衡量一个工具是否先进的问题。泄露的原因很多如:导杆与导管间隙过大,定心不正确,切削表面有缺陷,座圈材料不均匀或铰削时有的固定螺栓未扭紧等。所以,建议大家在刚买回工具后,前期要用煤油或抽真空的方法进行检测,如泄露,找出问题的原因,积累经验,在检测之前,先插入新气门(或者磨光后的气门)用力拍击数次,以去除用肉眼看不到,但能引起泄露的毛刺。7.刀片的使用: 刀片的寿命与维修数量和座圈的硬度有关系。比如德国车(包括国内合资的大众系列车)美国车和其他部分车,座圈的材质不硬,刀片可以维修600-800个座圈口,才需刃磨,使用过程中如切削北京212、切诺斟、伏尔加等有名的硬座圈,维修400-500个座圈口后,

运筹学课程设计指导书

运筹学课程设计指导书 一、课程设计目的 1、初步掌握运筹学知识在管理问题中应用的基本方法与步骤; 2、巩固和加深对所学运筹学理论知识及方法的理解与掌握; 3、锻炼从管理实践中发掘、提炼问题,分析问题,选择建立运筹学模型,利用模型求解问题,并对问题的解进行分析与评价的综合应用能力; 4、通过利用运筹学计算机软件求解模型的操作,掌握运筹学计算软件的基本操作方法,并了解计算机在运筹学中的应用; 二、课程设计内容与步骤 第一部分是基本实验,为必做部分;需要每位同学单独完成,并写出相应的实验报告。第二部分是提高部分,题目自选或自拟,锻炼综合应用运筹学知识及软件解决实际问题的能力;可以单独完成,也可以合作完成(最多3人一组),写出相应的报告。 1、基本实验在完成基本实验后,每位同学要按照实验要求完成实验报告,实验报告应包括问题描述、建模、上机求解、结果分析及答辩几方面。实验报告必须是打印稿(word文档等),手写稿无效。请大家按照要求认真完成实验报告,如果两份实验报告雷同,或相差很少,则两份实验报告均为0分,其它抄袭情况,将根据抄袭多少扣分。(约占总分的70%) 2、提高部分根据自己的兴趣或所查找的资料,从实际情况出发,自拟题目;在实验报告中,陈述问题,建立模型,求解,结果分析,此部分应着重突出自己的观点和想法。(此部分按照排名先后给分,约占总分的30%) 三、课程设计要求 1、实验目的 学会建立相应的运筹学模型 学会Excel、Lindo和WinQSB,QM for windows软件的基本使用方法 学会用Excel、Lindo和WinQSB,QM for windows软件得到问题的最优解 2、实验要求 分析问题、建立模型,并阐明建立模型的过程; 说明并显示软件使用和计算的详细过程与结果; 结果分析,将结果返回到实际问题进行分析、评价。 四、题目内容 (一)Excel规划求解基本实验 1、雅致家具厂生产4种小型家具,由于该四种家具具有不同的大小、形状、重量和风格,所以它们所需要的主要原料(木材和玻璃)、制作时间、最大销售量与利润均不相同。该厂每天可提供的木材、玻璃和工人劳动时间分别为600单位、1000单位与400小时,详细的数据资料见下表。问: (1)应如何安排这四种家具的日产量,使得该厂的日利润最大? (2)家具厂是否愿意出10元的加班费,让某工人加班1小时? (3)如果可提供的工人劳动时间变为398小时,该厂的日利润有何变化? (4)该厂应优先考虑购买何种资源?

钳工实训作业内容和要求

钳工实训作业内容和要求 课程的基本条件 钳工实训课程要在专业的培训场地对学生进行严格的训练。 1.场地要求 具备30个工位的钳工教室,每个教室要有一位钳工实习指导教师。若有条件,在教室内设置一组可播放视听教材或网络教材的大屏幕电视或投影电视。 2.工、量、刃具,设备,辅具 ●钳工台15张,每张钳工台安装两个虎钳。 ●台钻4台,立钻1台,每台钻床配备l台平口钳。 ●大平板1个,方箱1个。 ●砂轮机1台。 ●常用的钳工工具,如:钳工手锤、锯弓、样冲、划针等。 常用的钳工量具,如:卡尺、角尺、刀口尺、塞尺、千分尺等。 常用的钳工刃具,如:锉刀、扁錾、钻头、丝锥、铰刀、刮刀等。 3.学生分组安排 钳工实训学生人数以每间教室20-30人教学效果较好。 课题1:钳工概述(1学时) 【实训目的】 1.了解钳工在工业生产中的地位和作用 2.了解钳工所用的工、量、.刃具、设备 3.了解钳工实习场地的规章制度和安全文明生产规程 4.掌握虎钳拆装方法 【实训内容】 1.介绍钳工在工业生产中的作用和地位 2.介绍钳工常用工、量、刃具、设备的用途和保养方法 3.介绍实习场地的规章制度,安全操作规程和文明生产要求 4.学习虎钳拆装方法 【实训知识点】 1.1钳工工作的主要任务 1.2钳工工作场地的常用设备。 1.3钳工工作场地的管理与组织 【实训作业】 虎钳拆装练习

课题2:锉削加工(8学时) 【实训目的】 1.了解锉削加工相关知识 2.掌握正确的锉削姿势和动作要领 3.掌握平面、垂直面、平行面的锉削方法 4.掌握平面、垂直面、平行面的检测方法 5.掌握工件尺寸精度、表面粗糙度的检测方法及控制方法【实训内容】 1.锉刀的握法及锉削的姿势和动作要领’· 2.平面、垂直面、平行面的锉削方法 3.平面、垂直面、平行面的检测方法 4.工件尺寸精度、表面粗糙度的检测方法及控制方法5.锉削中的安全、文明生产要求 6.常用量具的正确使用和保养 【实训知识点】 2.1锉刀 2.2锉刀刷 2.3防护钳口 2.4工件的装夹方法 2.5工检具放置 2.6锉刀的握法 2.7锉削的步法 2.8锉削姿势 2.9锉削时的施力变化 2.10锉削速度 2.11平面的锉削方法 2.12平面度误差的检测方法 2.13垂直度误差的检测方法 2.14尺寸误差及平行度误差的检测法 2.15锉削安全知识 【实训作业】 一、锉削姿势和动作要领练习 1.备料单 2.工具、检具、刃具准备清单

Hbase安装配置文档

HBase安装和配置

1、准备工作 安装HBase之前必须先安装Hadoop和ZooKeeper以及jdk 这里安装的是Hadoop-2.7.1、ZooKeeper-3.4.6和jdk-1.7.0_79,具体安装参见其它文档 环境:3台CentOS6.5,64位 Master IP1 Slave1 IP2 Slave2 IP3 注:IP1、IP2、IP3是自己服务器的真实IP地址,服务器的主机名可以自己命名。 2、下载hbase https://www.sodocs.net/doc/d510477516.html,/apache/hbase/ 3、4需要在每一个hbase相关服务器上进行操作 3、设置ulimit vim /etc/security/limits.conf * hbase nofile 65536 * hard nofile 65536 保存后重新进入下终端。 4、配置环境变量 vim /etc/profile

追加下面两行 export HBASE_HOME=/home/hbase/hbase-1.1.3 export PATH=$HBASE_HOME/bin:$PATH 使环境变量生效 source /etc/profile 5、移动安装包到/home/hbase下,并解压 cd /home mkdir hbase tar -xvf hbase-1.1.3.tar.gz 6、配置hbase-env.sh 在文件/home/hbase/hbase-1.1.3/conf/hbase-env.sh中修改下面两行。如果配置文件中已经有设置,需要调整为下面的参数。 export JAVA_HOME=/usr/java/jdk1.7.0_79/ export HBASE_MANAGES_ZK=false 注意:对于JAVA_HOME的参数值需要根据,实际情况配置。可以通过echo $JAVA_HOME后查看当前环境中的值。 说明: 一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群。这个集群会随着Hbase的启动而启动。当然,你也可以自己管理一个zookeeper集群,但需要配置Hbase。你需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper。 7、配置hbase-site.xml 修改文件/home/hbase/hbase-1.1.3/conf/hbase-site.xml

MATLAB与在运筹学中的应用

MATLAB与在运筹学中的应用 摘要:论文通过MATLAB在运筹学中的应用实例,探讨了MATLAB在运筹学中的应用方法和技巧,初步了解matlab中优化工具箱的使用。 关键字:MATLAB应用运筹学优化计算 引言 运筹学是近代应用数学的一个分支,主要是研究如何将生产、管理等事件中出现的运筹问题加以提炼,然后利用数学方法进行解决的学科。运筹学是应用数学和形式科学的跨领域研究,利用像是统计学、数学模型和算法等方法,去寻找复杂问题中的最佳或近似最佳的解答。运筹学经常用于解决现实生活中的复杂问题,特别是改善或优化现有系统的效率。运筹学中常用的运算工具有Matlab、Mathematica、Maple、SAS 、SPSS、Lindo/Lingo、GAMS、WinQSB、Excel、其他,如SQP、DPS、ORS、Visual Decision、Decision Explore、AIMMS、Crystal等。 Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,和Mathematica、Maple并称为三大数学软件。 用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和Simulink两大部分。 主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 将matlab用于运筹学的最优化运算可以很好的解决优化问题,而且matlab 还专门有优化工具箱,是处理优化问题更加方便。 一、例:0-1规划(《运筹学》80页例3-9) 求minZ=x1-3*x2+6*x3+2*x4-4*x5 6*x1+2*x2-x3+7*x4+x5<=12 约束条件 x1+4*x2+5*x3-x4+3*x5>=10 Xj=0或1,j=1,2,3,4

HBASE安装及客户端编程配置

HBASE 安装 一、安装指南 二、常见问题 一、安装指南 Hadoop+Hbase安装配置实录 2010-10-12 22:53 生产环境: 3台机 器:master(192.168.0.61),slave1(192.168.0.62),slave2(192.168.0.63) 注意:hostname设置为master/slave1/slave2 操作系统:rhel5.4 x86_64 master做为namenonde,将slave1和slave2做为datanode 1.在master:(在slave1和slave2上操作和以下相同) vi /etc/hosts 192.168.0.61 master 192.168.0.62 slave1 192.168.0.63 slave2 2.用root操作 3.免密码登录 #ssh-keygen -t rsa #建立ssh目录,敲回车到底 ,这一步需要先在每台机器上执行。 在master上 #scp ~/.ssh/id_rsa.pub root@slave1:/root/.ssh/id_rsa.pub_m将master 上的密钥传到slave1的/home/hadoop下 在slave1上 #cat /root/.ssh/id_rsa.pub_m >> ~/.ssh/authorized_keys #chmod 644 ~/.ssh/authorized_keys 反复操作第3步,完成master<-->slave1 master<-->slave2的免密码登录 这样主节点和从节点之间就可以不用密码直接ssh访问,另外,在启动hadoop 时需要master ssh master, 因此,在master的~/.ssh下,也执行下cat id_rsa.pub >> authorized_keys 即可。

摇表、万用表、钳形表的使用方法

摇表(兆欧表),万用表,钳形表的使用方法 电工常用测量仪表有摇表、万用表和钳形电流表,这些仪表在测量时若不注意正确的使用方法或稍有疏忽,不是将表烧坏,就是使被测元件损坏,甚至还危及人身安全,因此,掌握摇表(兆欧表),万用表,钳形表的使用方法。 电工常用测量仪表有摇表、万用表和钳形电流表,这些仪表在测量时若不注意正确的使用方法或稍有疏忽,不是将表烧坏,就是使被测元件损坏,甚至还危及人身安全,因此,掌握常用电工测量仪表的正确使用方法是非常重要的。 1 摇表 摇表又称兆欧表,其用途是测试线路或电气设备的绝缘状况。使用方法及注意事项如下: (1) 首先选用与被测元件电压等级相适应的摇表,对于500V及以下的线路或电气设备,应使用500V或1000V 的摇表。对于500V以上的线路或电气设备,应使用1000V或2500V 的摇表。 (2) 用摇表测试高压设备的绝缘时,应由两人进行。 (3) 测量前必须将被测线路或电气设备的电源全部断开,即不允许带电测绝缘电阻。并且要查明线路或电气设备上无人工作后方可进行。 (4) 摇表使用的表线必须是绝缘线,且不宜采用双股绞合绝缘线,其表线的端部应有绝缘护套;摇表的线路端子“L”应接设备的被测相,接地端子“E”应接设备外壳及设备的非被测相,屏蔽端子“G”应接到保护环或电缆绝缘护层上,以减小绝缘表面泄漏电流对测量造成的误差。 (5) 测量前应对摇表进行开路校检。摇表“L”端与“E”端空载时摇动摇表,其指针应指向“∞”;摇表“L”端与“E”端短接时,摇动摇表其指针应指向“0”。说明摇表功能良好,可以使用。 (6) 测试前必须将被试线路或电气设备接地放电。测试线路时,必须取得对方允许后方可进行。

铰孔常见问题

铰孔是孔的精加工方法之一,在生产中应用很广。对于较小的孔相对于内圆磨削及精镗而言,铰孔是一种较为经济实用的加工方法。铰孔是铰刀从工件孔壁上切除微量金属层,以提高其尺寸精度和孔表面质量的方法。但是在铰孔加工中也经常会产生各种各样的问题,本文将为大家介绍一下我们应怎样解决这些问题。 1. 孔径增大 问题产生的原因: 1)铰刀外径尺寸设计值偏大或铰刀刃口有毛刺、切削速度过高。 2)进给量不当或加工余量过大、铰刀主偏角过大、铰刀弯曲、铰刀刃口上粘附着切屑瘤。 3)刃磨时铰刀刃口摆差超差、切削液选择不合适、安装铰刀时锥柄表面油污未擦干净或锥面有磕碰伤。 4)锥柄的扁尾偏位装入机床主轴后锥柄圆锥干涉、主轴弯曲或主轴轴承过松或损坏。 5)铰刀浮动不灵活、与工件不同轴、手铰孔时两手用力不均匀,使铰刀左右晃动。 解决办法: 1)根据具体情况适当减小铰刀外径、降低切削速度、适当调整进给量或减少加工余量、适当减小主偏角、校直或报废弯曲的不能用的铰刀。 2)用油石仔细修整到合格、控制摆差在允许的范围内、选择冷却性能较好的切削液。 3)安装铰刀前必须将铰刀锥柄及机床主轴锥孔内部油污擦净,锥面有磕碰处用油石修光。 4)修磨铰刀扁尾、调整或更换主轴轴承、重新调整浮动卡头,并调整同轴度注意正确操作。 2. 孔径缩小 问题产生的原因: 1)铰刀外径尺寸设计值偏小、切削速度过低、进给量过大、铰刀主偏角过小、切削液选择不合适、刃磨时铰刀磨损部分未磨掉,弹性恢复使孔径缩小。 2)铰钢件时,余量太大或铰刀不锋利,易产生弹性恢复,使孔径缩小、内孔不圆,孔径不合格。 解决办法: 1) 更换铰刀外径尺寸、适当提高切削速度、适当降低进给量、适当增大主偏角、选择润滑性能好的

HBase在Linux下安装和配置详解

HBase在Linux下安装和配置详解 2012-11-05 13:33 ideawu ideawu我要评论(0)字号:T | T 在Linux系统下如何安装和配置HBase?首先从Hbase官网下载页面下载安装包, 然后配置hbase-env.sh和hbase-default.xml,详细步骤请看本文介绍。 AD:2013云计算架构师峰会超低价抢票中 1. 下载安装包 从 Hbase官网下载页面下载安装包, 然后: 1.tar xfz hbase-0.94. 2.tar.gz 2.cd hbase-0.94.2 3.chmodugo+x ./bin/*.sh 注意, 要修改 bin/ 目录下的脚本的的权限, 不然启动出错。 2. 配置 hbase-env.sh 和 hbase-default.xml 两个配置文件中的一个 hbase-env.sh 已经存在于 conf/ 目录下, 但 hbase-default.xml 并不在 conf/ 目录, 需要从 ./src/main/resources/ 目录拷贝: 1.cp ./src/main/resources/hbase-default.xml ./conf/ 修改 hbase-env.sh 的如下几个地方: 1.export JAVA_HOME=/home/wuzuyang/software/jdk1.7.0/ 2.export HBASE_CLASSPATH=/home/wuzuyang/software/hbase-0.94.2/lib/ 3.export HBASE_PID_DIR=${HBASE_HOME}/tmp 4.export HBASE_IDENT_STRING=my 修改 hbase-default.xml 的如下几个地方: 1.hbase.rootdir 2./home/work/software/hbase-0.94.2/data 3. 4.hbase.tmp.dir 5./home/work/software/hbase-0.94.2/tmp 6.

攻丝的要点

攻丝的要点 (1)工件上螺纹底孔的孔口要倒角,通孔螺纹两端都倒角。 (2)工件夹位置要正确,尽量使螺纹孔中心线置于水平或竖直位置,使攻丝容易判断丝锥轴线是否垂直于工件的平面。 (3)在攻丝开始时,要尽量把丝锥放正,然后对丝锥加压力并转动绞手,当切入1-2圈时,仔细检查和校正丝锥的位置。一般切入3-4圈螺纹时,丝锥位置应正确无误。以后,只须转动绞手,而不应再对丝锥加压力,否则螺纹牙形将被损坏。 (4)攻丝时,每扳转绞手1/2-1圈,就应倒转约1/2圈,使切屑碎断后容易排出,并可减少切削刃因粘屑而使丝锥轧住现象。 (5)攻不通的螺孔时,要经常退出丝锥,排除孔中的切屑。 (6)攻塑性材料的螺孔时,要加润滑冷却液。对于钢料,一般用机没或浓度较大的乳化液要求较高的可用菜油或二硫化钼等。对于不锈钢,可用30号机油或硫化油。 (7)攻丝过程中换用后一支丝锥时,要用手先旋入已攻出和螺纹中,至不能再旋进时,然后用绞手扳转。在末锥攻完退出时,也要避免快速转动绞手,最好用手旋出,以保证已攻好的螺纹质量不受影响。 (8)机攻时,丝锥与螺孔要保持同轴性。 (9)机攻时,丝锥的校准部分不能全部出头,否则在反车退出丝锥时会产生乱牙。 (10)机攻时的切削速度,一般钢料为6-15米/分;调质钢或较硬的钢料为5-1 0米/分;不锈钢为2-7米/分;铸铁为8-10米/分。在同样材料时,丝锥直径小取较高值,丝锥直径大取较低值。 “刚性攻丝” 又称“同步进给攻丝”。刚性攻丝循环将主轴旋转与进给同步化,以匹配特定的螺纹节距需要。由于往孔中的进给是同步化的,因此在理论上讲不能采用带任何张力压缩的整体丝锥夹。 但是,在实际生产中这方面所存在的问题是,机床无法与正在使用的特定丝锥节距精确匹配。在机床所加工的螺纹与丝锥实际节距之间总存在细微的差异。如果采用整体丝锥夹,则该差异对丝锥寿命以及螺纹质量具有决定性的影响,因为在丝锥上要施加额外的轴向作用力。 如果采用带张力压缩浮动的丝锥夹,则丝锥寿命以及螺纹质量将大大提高,因为消除了丝锥上这些额外的轴向作用力。对传统张力压缩丝锥夹存在的问题是,它们会引起攻丝深度方面较大的变化。随着丝锥变钝,将丝锥启动到孔内所需要的压力增加,在丝锥开始切削之前在丝锥驱动器内所用的压缩行程更大。结果是攻丝深度较浅。 刚性攻丝的主要优点之一是在盲孔加工中可以精确控制深度。为了精确而一致地加工工件,需要采用具有足够补偿的丝锥夹来实现较高的丝锥寿命,而不在深度控制方面引起任何变化。

运用线性规划对运输问题研究

运用线性规划对运输问题研究 班级:金融103班姓名:王纬福学号:5400210132摘要:由于企业选择运输路线或运输工具不合理而导致物流运输成本不能最小化的问题普遍存在而管理运筹学却能很好的解决此问题。通过科学的方法对问题进行具体化再建立数学模型并求解,就能找到运输成本最小的运输组合。 关键词:物流运输成本、输成本、管理运筹学、WinQSB2.0、线性规划 一、引言 日常生活中,人们经常需要将某些物品由一个空间位置移动到另一个空间位置,这就产生了运输。如何判定科学的运输方案,使运输所需的总费用最少,就是管理运筹学在运输问题上的运用需要解决的问题。 运输问题是一类应用广泛的特殊的线性规划问题,在线性规划的一般理论和单纯形法出现以前,康托洛维奇(L.V.Kant)和希奇柯克(F.L.Hitchcock)已经研究了运输问题。所以,运输问题又有“康-希问题”之称。对于运输问题(Transportation Problem TP)当然可用前面所讲的单纯形法求解,但由于该问题本身的特殊性,我们可以找到比标准单纯形法更简单有效的专门方法,从而节约计算时间和费用。主要是因为它们的约束方程组的系数矩阵具有特殊结构,使得这类问题的求解方法比常规的单纯形法要更为简便。 一、研究现状 运输问题的研究较多,并且几乎所有的线性规划书中都有论述。遗憾的是一些书中所建立的数学模型都不够全面和系统的。但是也有一些模型是严谨的没有漏洞和缺陷,并且很容易在此基础上修改或添加一些其他约束条件便于在实际工程中进行应用。管理运筹学在运输问题上的研究较为深入、全面、系统。对于计算机软件的引用也很前言,winQSB2.0对于普通甚至深入研究运输问题就已经是简单而又使用、耐用、好用的了。现在相关的杂志、期刊都越来越多关于管理运筹学,关于运输问题的文章论文初版,越来越得到重视。 二、文献回顾 随着物流行业和企业对物流运输要求的不断提高,企业的面临着更大的市场竞争,其运输活动在企业不断发展过程中,面临着越来越大难度的运输组合的选择决策问题。如何正确解决这个问题,是企业能够持续经营和发展不可忽视和必须面对的。这个问题同时也引起了企业界、学术界等社会各界的广泛关注。运输问题的实质是企业与运输组合的经济性问题,成功的企业通常都会面临如何选取最佳运输组合或运输路线这样一个重要问题,即以企业运输成本最小化作为确定最佳运输组合或运输路线的原落脚点。 四、案例分析 例:某公司下设生产同类产品的加工厂A1、A2、A3,生产的产品由4个销售点B1、B2、B3、B4出售。各工厂的生产量、各销售点的销量以及各工厂到各销售点的单位运价如下表:

钳型表的使用方法及注意事项

钳型表的使用方法及注意事项 一、使用说明 通常用普通电流表测量电流时,需要将电路切断停机后才能将电流表接入进行测量,这是很麻烦的,有时正常运行的电动机不允许这样做。此时,使用钳形电流表就显得方便多了,可以在不切断电路的情况下来测量电流。钳形电流表工作原理如下: 钳形电流表是由电流互感器和电流表组合而成。电流互感器的铁心在捏紧扳手时可以张开;被测电流所通过的导线可以不必切断就可穿过铁心张开的缺口,当放开扳手后铁心闭合。穿过铁心的被测电路导线就成为电流互感器的一次线圈,其中通过电流便在二次线圈中感应出电流。从而使二次线圈相连接的电流表便有指示-----测出被测线路的电流。钳形表可以通过转换开关的拨档,改换不同的量程。但拨档时不允许带电进行操作。钳形表一般准确度不高,通常为2.5~5级。为了使用方便,表内还有不同量程的转换开关供测不同等级电流以及测量电压的功能。 二、使用方法 1、在使用钳形电流表前应仔细阅读说明书,弄清是交流还是交直流两用钳形表。 2、被测电路电压不能超过钳形表上所标明的数值,否则容易造成接地事故,或者引起触电危险。

3、钳形表每次只能测量一相导线的电流,被测导线应置于钳形窗口中央,不可以将多相导线都夹入窗口测量。 4、使用高压钳形表时应注意钳形电流表的电压等级,严禁用低压钳形表测量高电压回路的电流。用高压钳形表测量时,应由两人操作,非值班人员测量还应填写第二种工作票,测量时应戴绝缘手套,站在绝缘垫上,不得触及其它设备,以防止短路或接地。 5、观测表计时,要特别注意保持头部与带电部分的安全距离,人体任何部分与带电体的距离不得小于钳形表的整个长度。 6、在高压回路上测量时,禁止用导线从钳形电流表另接表计测量。测量高压电缆各相电流时,电缆头线间距离应在300mm以上,且绝缘良好,待认为测量方便时,方能进行。 三、注意事项 (1)被测线路的电压要低于钳表的额定电压。 (2)测量低压可熔保险器或水平排列低压母线电流时,应在测量前将各相可熔保险或母线用绝缘材料加以保护隔离,以免引起相间短路。 (3)钳口要闭合紧密不能带电换量程。 (4)当电缆有一相接地时,严禁测量。防止出现因电缆头的绝缘水平低发生对地击穿爆炸而危及人身安全。 (5)测高压线路的电流时,要戴绝缘手套,穿绝缘鞋,站在绝缘垫上。

分布式数据库原理及应用实验10-redis与hbase安装

《分布式数据库原理及应用》 实验报告 实验10:redis与hbase安装

一、实验目的 1.掌握redis与hbase的特点。 2.掌握redis与hbase的安装。 二、实验环境 操作系统自定 三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果) 实验内容: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 2.完成redis的安装与测试 3.完成hbase的安装与测试 实验步骤: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 Redis 所用语言:C/C++ 特点:运行异常快使用许可: BSD 协议:类 Telnet 有硬盘存储支持的内存数据库 Master-slave复制 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作。 Redis支持事务,支持哈希表,支持排序sets,支持队列(阻塞/非阻塞),支持将数据设置成过期数据(类似快速缓冲区设计) Pub/Sub允许用户实现消息机制。最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。 例如:股票价格、数据分析、实时数据搜集、实时通讯。 Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为Master-slave复制,通常应用在需要提供高可用性的服务器集群。 MongoDB 所用语言:C++ 特点:保留了SQL一些友好的特性(查询,索引) 使用许可: AGPL(发起者: Apache)协议: Custom binary( BSON) Master/slave复制(支持自动错误恢复,使用 sets 复制)内建分片机制 支持javascript表达式查询可在服务器端执行任意的 javascript函数 update-in-place支持比CouchDB更好。在数据存储时采用内存到文件映射对性能的关注超过对功能的要求建议最好打开日志功能(参数–journal) 最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对

钳形表使用说明书

目录 一、概述 (1) 二、安全操作准则 (1) 三、电气符号 (2) 四、外表结构 (3) 五、显示符号 (4) 六、输入端及功能按键 (5) 七、技术指标 (6) 1、一般规格 (6) 2、环境限制 (7) 3、电气规格 (7) 八、测量操作说明 (10) 九、仪表保养和维护 (13) 1、一般维护 (13) 2、电池更换 (13)

一、概述 本说明书包括有关的安全说明及警告提示,请仔细阅读有关内容并严格遵守所有的警告和注意事项。 A900系列叉钳形两用交流数字仪表是一款我公司首创的,新颖的手持式,薄型LCD显示的3 1/2位自动量程数字钳形多用表。整机以大规模集成电路双积分A/D转换器为核心。可用于测量交直流电压、交流电流、电阻、二极管及电路通断、温度测量等,并具有数据保持、最大值保持、自动/手动量程转换、自动极性显示、超量程显示、电池电压低提示、自动关机等功能。该仪表全量程过载保护、性能稳定、结构安全可靠,是野外维修、实验室、工厂、学校和电子爱好者最为实用的测量工具。 。 新购买的仪表开箱后请仔细检查下列配件有无缺少或损坏: 1.使用说明书一本 2.测试表笔一付 3.保修卡一张 4.背包一只 5.AAA类电池两节 6.测温探头一只(仅A902和A907型有) 二、安全操作准则: 1、在使用仪表前请仔细阅读使用说明书。 2、检查仪表壳体,应无破裂损坏现象;表笔绝缘应完好无损,无断 线脱头和铜线裸露现象。 3、按测量需要,应将量程功能开关置于正确位置。

4、当改变量程或功能时任何一根表笔均要与被测电路断开。 5、为避免损坏仪表,不要输入超过各量程档所规定的最大值。 6、在测量高于60V直流和30V交流以上电压时,应谨慎小心避免触 电。 7、当使用仪表进行测量时,勿打开电池盖,防触电危险。 8、更换电池前,应使表笔脱离被测电路。 9、在进行电流测量时,务必将表笔从仪表上取出。 10、进行电流测量时,可根据需要及实际情况选择使用叉形或钳形 测量(注意叉形部分最高只能测200A电流),同时保证手指不 要超过手指挡位,以免有触电危险。 11、不要改变仪表内部电路,以免损坏仪表危及安全。 12、应避免在直射阳光,高温高湿,易燃易爆以及蒸汽和粉尘大的 环境中使用和存放。 三、电气符号

模具钳工操作规范

第一章:钳工应具备的基本技能 一、划线知识 1.划线——工件在加工之前(指毛坯)或在加工过程中(指半成品),用划线工具或三坐标划线机按 图纸和加工工艺在工件上划出所需要的线条,用以表示工件上要加工的部位和界限。 2.划线的目的——第一,按照图纸和工艺要求确定各加工面的余量和各孔、槽、凸台、表面等的相互 位置,为以后的加工或校正提供参考依据;第二,可以对毛坯进行加工前的检查,并对加工余量进 行全面的调整和分配;第三,确定在板材上截取材料的位置,合理安排,做到节约材料。 3.划线前的准备—— A. 熟悉图纸和工艺文件,仔细分析下几道工序的具体要求; B. 对画线对象进行外 观的粗略检查,看其是否有明显的缺陷; C.对铸件毛坯,应预先清理型砂,除净毛刺和冒口; D. 对锻件毛坯,应将氧化皮去掉; E. 对半成品件,要去掉基准面上的毛刺,除净表面污垢和浮锈; F.考虑画线方案、画线基准、划线步骤、划线的内容以及划线工具、吊装工具和安全措施。 4.划线基准的选择—— A. 划线基准应尽量和设计基准一致; B. 选择已经精加工并且加工精度最高的 边、面或有配合要求的边、面、外圆、孔、槽和凸台的对称线; C.选择较长的边或相对两边的对称线,或是较大的面或相对两面的对称线; D.较大外圆的中心线; E.便于支撑的边、面或外圆; F.补充性划线时,要以原有的线或有关的装夹部位为基准。 二、钻孔及铰孔的基本要素 1.钻孔——在不同的材料上钻孔时,应根据材料的性质将钻头刃磨出相应的角度,以改善钻头的切 削性能,延长钻头的寿命,使钻出的孔达到图样的技术要求。加工钢和铸铁时钻头顶角为 116-118 °;加工钢锻件时顶角为 120-125 度;加工锰钢和不锈钢时顶角为 135-150 °。 2.钻头的刃磨——手工刃磨钻头时,为保证两主切削刃的对称性,在刃磨为每一步骤,应注意磨完 一侧翻转 180°再磨另一侧时要尽量做到三不变,及手持钻头的部位不变,手的姿势不变,刃磨 吃刀情况不变。必要时,可用量具检验或进行试钻检查。可在位置半径 R=(0.5-0.7 )R处测量(R 为钻头半径),它能综合反映出钻尖偏心和锋角不对称误差。 3.钻小孔的加工方法——小孔是指直径在 3mm以下的孔。钻小孔的钻头直径小,强度低,螺旋槽又 比较小,不易排屑,在钻削过程中,转速高,进给不均匀。故钻头容易折断。为此钻小孔时必须掌握以下几点: (1)选用精度较高的钻床,采用相应的小型钻夹头。 (2)开始进给时,进给力要小,防止钻头弯曲和滑移,以保证钻孔的正确位置。进给时要注意用力大小和感觉,以防钻头折断。 (3)钻削过程中,需及时提起钻头进行排屑并借此使孔中输入切削液和使钻头在空气中得到冷却。

相关主题